根据先序遍历的结果创建一棵树
根据先序遍历的结果还原一棵树 则该树是不确定的
例如 先序遍历的结果ABC 有两种形式
如果要还原一棵树,除了要知道先序遍历的结果,还需要知道树的位置。
如果用#表示空树,
则左边的二叉树为 AB##C##
而右边的二叉树为 ABC####
已只先序遍历的结果,在创建树时,先创建根节点
再递归创建左子树,再递归创建右子树。
//arr:保存先序遍历序列的字符串
//size: 字符串的长度
//index: 位置下标
//null_flag:为空树的标志
TreeNode* _CreateTree(TreeType arr[],size_t size, size_t* index, char null_flag)
60 {
61 if(arr==NULL||index==NULL||size<0)
62 {
63 //非法输入
64 return NULL;
65 }
66 if(arr[*index]==null_flag)
67 {
68 //空子树
69 return NULL;
70 }
71 //创建根结点
72 TreeNode* root=CreateNode(arr[*index]);
73 (*index)++;
74 //递归创建左子树
75 root->lchild=_TreeCreate(arr,size, index,null_flag);
76 (*index)++
77 //递归创建右子树
78 root->rchild=_TreeCreate(arr,size,index,null_flag);
79 return root;
80 }
81
81
83 TreeNode* CreateTree(TreeType arr[],size_t size, char null_flag)
84 {
85 int index=0;
86 TreeNode* root=_TreeCreate(arr,size,&index,null_flag);
87 return root ;
88 }