之前我们在学习二叉树的遍历的时候都是先手动创建出一个二叉树,然后再前中后序的遍历,
但实际中,是给你一个数组里面存的数,然后把他以(前中后)的遍历储存创建为一个二叉树
思路:
想要创建二叉树,首先就要有树节点的结构体:
typedef char DataType;
typedef struct TreeNode
{
struct TreeNode* left;
struct TreeNode* right;
DataType val;
}TNode;
然后遍历字符数组,只要不是#,就要创建一个树节点把数据存进去,然后递归,先递归左,直到返回NULL.说明左树已经遍历到底,然后递归遍历右树,这样就实现了把字符串中的数组按前序遍历的数组储存到树中,也就建立了一二叉树
TNode* FrontTree(char* tre,int* pi)//创建二叉树
{
if(tre[*pi]=='#')
{
(*pi)++;
return NULL;
}
TNode* node=(TNode*)malloc(sizeof(TNode));
node->val=tre[*pi];
(*pi)++;
node->left=FrontTree(tre,pi);
node->right=FrontTree(tre,pi);
return node;
}
void IntoTree(TNode* root)//中序打印
{
if(root==NULL)
{
return;
}
IntoTree(root->left);
printf("%c ",root->val);
IntoTree(root->right);
}
int main() {
char tre[100];
scanf("%s",tre);
int i=0;
TNode* tree=FrontTree(tre,&i);
IntoTree(tree);
return 0;
}