层序遍历+中序遍历构造二叉树
Posted weixin_43739821
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了层序遍历+中序遍历构造二叉树相关的知识,希望对你有一定的参考价值。
//思想是限制中序序列数组的上下限,而不限制层序序列的上下限,因为层序序列中越离根结点近的结点越先被访问,所以搜寻中序序列中第一个与层序序列中匹配的结点,这个结点就是根结点,然后同时也找到了这段中序序列的根结点的位置,那么他左边部分是它的左子树的中序序列,右边同理,递归循环传入参数限制左右子树的中序序列上下限,层序序列上下限依旧不变,这种思路应该时间复杂度比较高,后面有更好的算法会继续更新。
BTNode* CreateBTree(ElementType level[], ElementType in[], int l1, int r1, int l2, int r2)
if (l2 > r2)
return NULL;
else
BTNode* bt = (BTNode*)malloc(sizeof(BTNode));
int i, j;//分别指向level和in中数组的元素
int flag = 0;
//寻找根结点,若level中第一个与in中元素匹配的即为根结点
for (i = l1; i <= r1; ++i)
for (j = l2; j <= r2; ++j)
if (level[i] == in[j])
flag = 1;
break;
if (flag == 1)
break;
bt->data = level[i];
bt->lchild = CreateBTree(level, in, l1 + 1, r1, l2, j - 1);
bt->rchild = CreateBTree(level, in, l1 + 1, r1, j + 1, r2);
return bt;
代码直接拿的这位大佬的:
https://blog.csdn.net/weixin_42545675/article/details/103337658
以上是关于层序遍历+中序遍历构造二叉树的主要内容,如果未能解决你的问题,请参考以下文章