從中序與後序遍歷序列構造二叉樹

由於後序遍歷時最後節點是根節點,接着是右子樹的根節點,一直往下。。。

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def buildTree(self, inorder: List[int], postorder: List[int]) -> TreeNode:
        if postorder.__len__() == 0 or inorder.__len__() == 0:
            return
        center = postorder[-1]
        inorderCenterIndex = inorder.index(center)
        root = TreeNode(center)
        left = inorder[:inorderCenterIndex] #構造當前根節點左子樹
        right = inorder[inorderCenterIndex + 1:] #構造當前根節點右子樹
        postorder.pop() #將當前根節點從postorder中彈出
        if len(right) == 1: #先構建右子樹,再左子樹,碰到只有一個葉子的位置直接添加再刪除postorder中的最後一個節點
            root.right = TreeNode(right[0])
            postorder.pop()
        else:
            root.right = self.buildTree(right, postorder)
        
        if len(left) == 1:
            root.left = TreeNode(left[0])
            postorder.pop()
        else:
            root.left = self.buildTree(left, postorder)
            
        return root

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章