題目描述
給出一個滿足下述規則的二叉樹:
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 是否存在於還原後的二叉樹中並返回結果。
算法思路
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