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

中序和先序遍历恢复二叉树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

猜你喜欢

转载自blog.csdn.net/qq_54384621/article/details/124140248