type
status
date
slug
summary
tags
category
icon
password
创建时间
Mar 4, 2025 02:14 AM
给出一个满足下述规则的二叉树:
root.val == 0
- 对于任意
treeNode
: - 如果
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
是否存在于还原后的二叉树中并返回结果。
深度优先遍历+哈希表
通过深度优先遍历,将存在的元素放入到哈希表中。查找的时候,直接通过哈希表来查询。
位运算
参考 灵茶山艾府
我们发现,根据题意,如果把树当作完全二叉树,则完全每个节点就是其层序遍历的序号。进一步,我们发现其数字加 1 后,代表的二进制的最后一位,恰好为左为 0,右为 1。也就是偶数为左儿子,奇数为右儿子。