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

//思想是限制中序序列数组的上下限,而不限制层序序列的上下限,因为层序序列中越离根结点近的结点越先被访问,所以搜寻中序序列中第一个与层序序列中匹配的结点,这个结点就是根结点,然后同时也找到了这段中序序列的根结点的位置,那么他左边部分是它的左子树的中序序列,右边同理,递归循环传入参数限制左右子树的中序序列上下限,层序序列上下限依旧不变,这种思路应该时间复杂度比较高,后面有更好的算法会继续更新。

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值