【力扣】1261:在受污染的二叉樹中查找元素

題目描述

給出一個滿足下述規則的二叉樹:

root.val == 0
如果 treeNode.val == x 且 treeNode.left != null,那麼 treeNode.left.val == 2 * x + 1
如果 treeNode.val == x 且 treeNode.right != null,那麼 treeNode.right.val == 2 * x + 2
現在這個二叉樹受到「污染」,所有的 treeNode.val 都變成了 -1

請你先還原二叉樹,然後實現 FindElements 類:

FindElements(TreeNode* root) 用受污染的二叉樹初始化對象,你需要先把它還原。
bool find(int target) 判斷目標值 target 是否存在於還原後的二叉樹中並返回結果。

來源:力扣(LeetCode)

算法思路

class FindElements:
    def __init__(self, root: TreeNode):

復原部分就是最簡單的二叉樹構建

至於find部分,本來是想遍歷二叉樹的,但是突然想到樹值是不重複的,哈希表豈不正好?

class FindElements:

    def __init__(self, root: TreeNode):
        self.f=set()
        def helper(root,val=0):
            if not root:return
            root.val=val
            self.f.add(val)
            root.left=helper(root.left,root.val*2+1)
            root.right=helper(root.right,root.val*2+2)
            return root
        helper(root)

    def find(self, target: int) -> bool:
        return target in self.f
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章