刷題系列 - 給出前序和後序遍歷佇列,構造對應二叉樹

張國平發表於2020-02-04

既然中序和後序佇列構成二叉樹寫了,就把前序和中序一做吧。


原理其實也很簡單,前序佇列第一個點就是根節點,再中序佇列裡面這個根節點可以分出左右兩個樹的兩個中序佇列,然後可以按照左右樹的節點數量,再前序節點裡面分出對應兩組前序佇列;然後反覆遞迴即可。

# 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, preorder: List[int], inorder: List[int]) -> TreeNode:
        if inorder == []:
            return None
        else:
            if len(inorder) == 1:
                return TreeNode(inorder[0])
            else:
                RootVal = preorder[0]
                currentNode = TreeNode(RootVal)
                inorderLeft = inorder[:inorder.index(RootVal)]
                inorderRight = inorder[inorder.index(RootVal)+1:]
                preorder.pop(0)
                preorderLeft = preorder[:len(inorderLeft)]
                preorderRight = preorder[-len(inorderRight):] 
                currentNode.left = self.buildTree(preorderLeft,inorderLeft)
                currentNode.right = self.buildTree(preorderRight,inorderRight)
                return currentNode


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22259926/viewspace-2674511/,如需轉載,請註明出處,否則將追究法律責任。

相關文章