🗒️1261. 在受污染的二叉树中查找元素
2025-3-4
| 2025-3-4
0  |  阅读时长 0 分钟
type
status
date
slug
summary
tags
category
icon
password
创建时间
Mar 4, 2025 02:14 AM
给出一个满足下述规则的二叉树:
  1. root.val == 0
  1. 对于任意 treeNode
    1. 如果 treeNode.val 为 x 且 treeNode.left != null,那么 treeNode.left.val == 2 * x + 1
    2. 如果 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。也就是偶数为左儿子,奇数为右儿子。

📎 参考

  • 【题单】位运算
  • 89. 格雷编码1680. 连接连续二进制数字
    Loading...