牛客刷题 -- 二叉树遍历

题目示例

牛客刷题 -- 二叉树遍历_第1张图片这道题的大致意思是:用户自己输入字符串,我们根据输入的字符串按照遍历方式(前/中/后序遍历)创建一棵二叉树,和根据二叉树创建数组相反,是不是感觉挺有意思?

思路分析

1.要根据用户输入的字符串创建数组,我得给用户一个输入的渠道吧

2.根据要求创建二叉树,要创建二叉树,要有结点空间吧,所以需要BuyNode方法去创建结点

3.假设利用先序遍历来构建二叉树,我该如何构建?

牛客刷题 -- 二叉树遍历_第2张图片

特别注意: 不要盲目的调用不返回创建的结点!!!

1.创建二叉树结点,判断arr[i] == '#'?不成立,存储到二叉树,继续遍历

2.中序遍历打印显示 

 代码实现

#include 
#include 
typedef struct TreeNode
{
    char val;
    struct TreeNode* left;
    struct TreeNode* right;
}TreeNode;

TreeNode* BuyNode(char x)
{
    TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
    node->val = x;
    node->left = node->right = NULL;
    return node;
}

TreeNode* createTree(char* arr, int* pi)
{
    if(arr[*pi] == '#')
    {
        (*pi)++;
        return NULL;
    }
    TreeNode* root = BuyNode(arr[*pi]);
    (*pi)++;
    root->left = createTree(arr, pi);
    root->right = createTree(arr, pi);
    return root;
}
void Inorder(TreeNode* root)
{
    if(root==NULL)
    {
        return;
    }
    Inorder(root->left);
    printf("%c ",root->val);
    Inorder(root->right);
}

int main() {
    char arr[100]={0};
    scanf("%s",arr);
    //创建二叉树
    int i=0;
    TreeNode* root = createTree(arr,&i);
    Inorder(root);
    return 0;
}

你可能感兴趣的:(数据结构)