二叉树 08. 从中序和后序遍历序列构造二叉树
题目:给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 中等
方法一:递归 时间复杂度O(N) 空间复杂度O(N)
后序遍历的末尾为二叉树的根节点,中序遍历的中点为二叉树的根节点,将中序遍历的节点放进哈希表,很巧,方便后面找中点
def buildTree(inorder, postorder): """ :type inorder: List[int] :type postorder: List[int] :rtype: TreeNode """ dic = {val:idx for idx,val in enumerate(inorder)} def bt(l,r): if l > r: return val = postorder.pop() root = TreeNode(val) mid = dic[val] root.right = bt(mid + 1,r) # 这里应是先右后左,因为后序遍历出栈是先右子树 root.left = bt(l,mid - 1) return root return bt(0,len(inorder) - 1)
方法二:迭代 时间复杂度O(N) 空间复杂度O(N)

浙公网安备 33010602011771号