Construct Binary Tree from Inorder and Postorder Traversal 二叉樹建立之中后根序

Easy

根據(jù)二叉樹的中根次序和后跟次序重建二叉樹。假設沒有重復。

Solution:
首先需要知道什么事二叉樹的中根次序和后跟次序。下面三張圖片對前中后跟次序做了清晰的解釋[1]。

前跟次序
中跟次序
后跟次序

對序列有了認識,就可以從中根次序和后根次序的特點來思考問題的解決辦法??梢钥吹胶蟾涡虻淖詈笠粋€數(shù)總是二叉樹的根節(jié)點。一旦確立的樹的根節(jié)點,則我們可以將該樹分成左右兩棵樹,從而又稱了遞歸問題。

注意,在做遞歸的時候,下面的方法有個小技巧:先對右支樹做遞歸,是利用了pop()命令不斷縮短postorder序列的特點,當右支樹被遍歷完成,postorder剩下的正好是左支數(shù)的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

  1. Wikipedia_Tree traversal: https://en.wikipedia.org/wiki/Tree_traversal ?

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容