牛客刷题 -- 二叉树遍历
题目示例
这道题的大致意思是:用户自己输入字符串,我们根据输入的字符串按照遍历方式(前/中/后序遍历)创建一棵二叉树,和根据二叉树创建数组相反,是不是感觉挺有意思?
思路分析
1.要根据用户输入的字符串创建数组,我得给用户一个输入的渠道吧
2.根据要求创建二叉树,要创建二叉树,要有结点空间吧,所以需要BuyNode方法去创建结点
3.假设利用先序遍历来构建二叉树,我该如何构建?
特别注意: 不要盲目的调用不返回创建的结点!!!
1.创建二叉树结点,判断arr[i] == '#'?不成立,存储到二叉树,继续遍历
2.中序遍历打印显示
代码实现
#include <stdio.h>
#include <stdlib.h>
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;
}