层序遍历+中序遍历构造二叉树

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

以上是关于层序遍历+中序遍历构造二叉树的主要内容,如果未能解决你的问题,请参考以下文章

层序遍历+中序遍历构造二叉树

层序遍历+中序遍历构造二叉树

层序遍历+中序遍历构造二叉树

手撕二叉树的4种遍历:前序中序后序层序

手撕二叉树的4种遍历:前序中序后序层序

二叉树——前序遍历中序遍历后序遍历层序遍历详解(递归非递归)