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

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

同根据前序遍历和中序遍历构建二叉树 先确定二叉树
在这里插入图片描述
找根结点: 后序的最后一个为根结点1 在中序中找到1 中序中 1前面的对应根结点1的左子树 一共三个结点
在后序中前三个结点4 5 2 为1的左子树后序遍历结果 确定 2 为1的左儿子
同理中序中 6 3 8 7 为1的右子树的前序遍历结果
后序中6 8 7 3 为1的右子树的后序遍历结果

Node* BuildTreeInPos(DataType Inorder[], DataType Posorder[], int size)//中序+后序 
{
	if (size == 0)
		return NULL;
	int r = -1;
	for (int i = 0; i < size; i++)
	{
		if (Inorder[i] == Posorder[size - 1])
		{
			r = i;
			break;
		}
	}
	assert(r != -1);
	Node*root = (Node*)malloc(sizeof(Node));
	root->value = Posorder[size - 1];//与前+中不同
	root->left = BuildTreeInPos(Inorder, Posorder, r);
	root->right = BuildTreeInPos(Inorder + r + 1, Posorder + r , size - 1 - r);
	//注意这里的posorder加的是r  不是r+1!!!!!!!!!!!!!!!!!!!!
	return root;
}
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值