Python 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,輸入前序遍歷序列{1,2,4,7,3,5,6,8}和中序遍歷序列{4,7,2,1,5,3,8,6},則重建二叉樹並返回。

class TreeNode:
    def __init__(self, x):
        self.val = x
        self.next = None


class Solution:
    def reConstructBinary(self, pre, tin):
        if not pre or not tin:
            return None
        if len(pre) != len(tin):
            return None
        root = pre[0]
        rootNode = TreeNode(root)
        pos = tin.index(root)

        tinLeft = tin[:pos]
        tinRight = tin[pos + 1:]

        preLeft = pre[1:pos + 1]
        preRight = pre[pos + 1:]

        leftNode = self.reConstructBinary(preLeft, tinLeft)
        rightNode = self.reConstructBinary(preRight, tinRight)

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