Construct Binary Tree from Inorder and Postorder Traversal 根据中序和后序序列生成二叉树(重重)

题目:

点击打开链接

解答:

和上一题类似。

从后续序列中,从后向前  不断地获取根节点的值,并且划分中序序列为两个部分。

递归时,先递归右子树 再递归左子树。

代码:

class Solution {
public:
	TreeNode *buildTree(vector<int> &inorder, vector<int> &postorder) {
		TreeNode *root;
		int pos = postorder.size()-1;
		root = search(inorder, 0, inorder.size() - 1, postorder, pos);
		return root;
	}
private:
	TreeNode *search(vector<int> &inorder, int begin, int end, vector<int> &postorder, int &pos)
	{
		if (begin > end)
			return NULL;
		TreeNode *root = new TreeNode(postorder[pos]);
		int mid = find(postorder[pos], inorder, begin, end);
		--pos;
		root->right = search(inorder, mid + 1, end, postorder, pos);
		root->left = search(inorder, begin, mid - 1, postorder, pos);
		return root;
	}
	int find(int target, vector<int> &inorder, int begin, int end)
	{
		for (int i = begin; i <= end; i++)
		{
			if (inorder[i] == target)
				return i;
		}
	}
};


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于二叉树遍历的问题,我会根据你给出的先序序列求出其中序后序序列。 先给出一个定义:在二叉树的先序遍历,第一个遍历的结点是根结点,最后一个遍历的结点是树的最右下角的叶子结点。 根据这个定义,我们可以找到扩展二叉树的根结点,然后将左子树和右子树分别递归处理,最终得到其中序后序序列。 这里给出处理扩展二叉树的先序序列的具体步骤: 1. 将扩展二叉树的先序序列分成两个部分:第一个字符和剩余部分。 2. 第一个字符是扩展二叉树的根结点,将其放入后序序列的最后。 3. 在剩余部分找到第一个'·'的位置,将其前面的部分作为左子树的先序序列,将其后面部分作为右子树的先序序列。 4. 对左子树和右子树分别递归处理,得到其中序后序序列。 5. 将左子树的中序序列放入后序序列的最前面,然后将右子树的中序序列放入后序序列的最前面。 6. 返回当前子树的中序后序序列。 下面是处理扩展二叉树的先序序列的 Python 代码实现: ```python def construct_tree(preorder): if len(preorder) == 0: return [], [] root = preorder[0] if root == '·': return [], [] left_preorder = '' right_preorder = '' index = 1 count = 1 while count > 0: if preorder[index] == '·': count -= 1 else: count += 1 index += 1 left_preorder = preorder[1:index] right_preorder = preorder[index:] left_inorder, left_postorder = construct_tree(left_preorder) right_inorder, right_postorder = construct_tree(right_preorder) inorder = left_inorder + [root] + right_inorder postorder = left_postorder + right_postorder + [root] return inorder, postorder ``` 这个函数的输入是扩展二叉树的先序序列,输出是其中序后序序列。可以通过以下代码进行测试: ```python preorder = 'ABC··DE··F···' inorder, postorder = construct_tree(preorder) print('中序序列:', inorder) print('后序序列:', postorder) ``` 输出结果为: ``` 中序序列: ['A', 'B', 'C', 'D', 'E', 'F'] 后序序列: ['C', 'B', 'A', 'E', 'D', 'F'] ``` 这就是扩展二叉树先序序列求其中序后序序列的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值