您的位置:首页 > 其它

根据中序遍历和先序遍历,后序遍历创建二叉树。

2017-03-16 10:15 337 查看

根据先序遍历和中序遍历创建二叉树

分析过程

char *VLR = “ABCDEFGH”;

char *LVR = “CBEDFAGH”;先序遍历是 ABCDEF,中序遍历是CBEDFAGH

先序遍历先是根节点,则A是根节点,此时根据中序遍历可以知道左孩子是CBEDF,右孩子是GH,递归下去可以知道整个二叉树的结构

2.代码:

void CreateBinTree_5(BinTreeNode *&t, char *VLR, char *LVR, int n)
{
if(n == 0)    //如果字符长度是0,则证明没有二叉树
t = NULL;
else
{
int k = 0; //在中序遍历中寻找根节点
while(VLR[0] != LVR[k])
k++;   //此时找到了根节点

t = (BinTreeNode*)malloc(sizeof(BinTreeNode));
assert(t != NULL);
t->data = LVR[k];  //创造根节点赋值

CreateBinTree_5(t->leftChild,VLR+1,LVR,k);//创建左孩子,左孩子的长度是k
CreateBinTree_5(t->rightChild,VLR+k+1,LVR+k+1,n-k-1);//创建右孩子,长度是n-k-1
}
}


根据中序遍历和后序遍历创建二叉树

分析过程

char *LVR = “CBEDFAGH”

char *LRV = “CEFDBHGA”

- 第一步先找到根节点,可以由后序遍历可以知道根节点是A,位置设为k
- 根据中序遍历知道左子树是CBEDF,长度是k,根据中序遍历和后续遍历进行递归
- 根据中序遍历知道右子树是GH,长度是n-k-1,根据中序遍历和后续遍历进行递归


代码

void CreateBinTree_6(BinTreeNode *&t, char *LVR, char *LRV, int n)
{
if(n == 0)
t = NULL;
else
{
int k = 0;
while(LRV[n-1] != LVR[k])
k++;

t = (BinTreeNode*)malloc(sizeo
4000
f(BinTreeNode));
assert(t != NULL);
t->data = LVR[k];

CreateBinTree_6(t->rightChild,LVR+k+1,LRV+k,n-k-1); //继续找右孩子
CreateBinTree_6(t->leftChild,LVR,LRV,k); //找左孩子
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐