Easy
根據二叉樹的中根次序和后跟次序重建二叉樹。假設沒有重復。
Solution:
首先需要知道什么事二叉樹的中根次序和后跟次序。下面三張圖片對前中后跟次序做了清晰的解釋[1]。
前跟次序
中跟次序
后跟次序
對序列有了認識,就可以從中根次序和后根次序的特點來思考問題的解決辦法。可以看到后跟次序的最后一個數總是二叉樹的根節(jié)點。一旦確立的樹的根節(jié)點,則我們可以將該樹分成左右兩棵樹,從而又稱了遞歸問題。
注意,在做遞歸的時候,下面的方法有個小技巧:先對右支樹做遞歸,是利用了pop()
命令不斷縮短postorder序列的特點,當右支樹被遍歷完成,postorder剩下的正好是左支數的postorder。
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def buildTree(self, inorder, postorder):
"""
:type inorder: List[int]
:type postorder: List[int]
:rtype: TreeNode
"""
if not inorder or not postorder:
return None
root = TreeNode(postorder.pop())
root_index = inorder.index(root.val)
root.right = self.buildTree(inorder[root_index+1:],postorder)
root.left = self.buildTree(inorder[:root_index], postorder)
return root
-
Wikipedia_Tree traversal: https://en.wikipedia.org/wiki/Tree_traversal ?