中序和先序遍历恢复二叉树

中序和先序遍历恢复二叉树python(年度更新系列)

输入: preorder = [3,9,20,15,7], inorder = [9,3,15,20,7]
输出: [3,9,20,null,null,15,7]

这种问题的思路直接分三步走:
1.通过先序遍历找出根节点:

rival = preorder[0];
root = TreeNode(rival)
mid = inorder.index(rival)

实现了找出根结点,并找出其下标index,以便于分割队列。
2.分割中序和先序的队列:

preorder_left = [1:mid+1]
preorder_left = [mid+1:]
inorder_left = [:mid]
inorder_right = [mid+1:]

3.开始递归:

root.left = self.buildTree(preorder_left,inorder_left)
root.right = self.buildTree(preorder_right,inorder_right)

具体代码如下:

class Solution(object):
    def buildTree(self, preorder, inorder):
    	if len(inorder) == 0:
    		return None
    	#如果队列为空则直接返回
    	rival = preorder[0]
    	root = TreeNode(rival)
		mid = inorder.index(rival)
		#创建根结点,并找出中序遍历的下标。
		preorder_left = preorder[1:mid+1]
		preorder_left = preorder[mid+1:]
		inorder_left = inorder[:mid]
		inorder_right = inorder[mid+1:]
		#分割两个列表
		root.left = self.buildTree(preorder_left,inorder_left)
		root.right = self.buildTree(preorder_right,inorder_right)
		#递归的求解。
		return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值