根据先序遍历的结果创建一棵树【D.S】

根据先序遍历的结果创建一棵树

根据先序遍历的结果还原一棵树 则该树是不确定的
例如 先序遍历的结果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 }

猜你喜欢

转载自blog.csdn.net/yu876876/article/details/80938912
今日推荐