​LeetCode解法汇总1261. 在受污染的二叉树中查找元素

news/2024/7/4 17:16:18

 目录链接:

力扣编程题-解法汇总_分享+记录-CSDN博客

GitHub同步刷题项目:

https://github.com/September26/java-algorithms

原题链接:. - 力扣(LeetCode)


描述:

给出一个满足下述规则的二叉树:

  1. root.val == 0
  2. 如果 treeNode.val == x 且 treeNode.left != null,那么 treeNode.left.val == 2 * x + 1
  3. 如果 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:

输入:
["FindElements","find","find"]
[[[-1,null,-1]],[1],[2]]
输出:
[null,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1]); 
findElements.find(1); // return False 
findElements.find(2); // return True 

示例 2:

输入:
["FindElements","find","find","find"]
[[[-1,-1,-1,-1,-1]],[1],[3],[5]]
输出:
[null,true,true,false]
解释:
FindElements findElements = new FindElements([-1,-1,-1,-1,-1]);
findElements.find(1); // return True
findElements.find(3); // return True
findElements.find(5); // return False

示例 3:

输入:
["FindElements","find","find","find","find"]
[[[-1,null,-1,-1,null,-1]],[2],[3],[4],[5]]
输出:
[null,true,false,false,true]
解释:
FindElements findElements = new FindElements([-1,null,-1,-1,null,-1]);
findElements.find(2); // return True
findElements.find(3); // return False
findElements.find(4); // return False
findElements.find(5); // return True

提示:

  • TreeNode.val == -1
  • 二叉树的高度不超过 20
  • 节点的总数在 [1, 10^4] 之间
  • 调用 find() 的总次数在 [1, 10^4] 之间
  • 0 <= target <= 10^6

解题思路:

一个数字正向的计算,就是不断的乘以2,然后+1或者+2。那么逆向去推,我们可以判断target%2是否等于0,如果等于0处于右节点,不等于0则位于左节点。

比如target=8,8%2=0,则记录2,然后(8-2)/2生成其父节点3,指向target。

target=3,3%2=1,则记录1,然后(3-1)/2生成其父节点1,指向target。

target=1,1%2=1,则记录1,指向根节点。

通过栈生成查找链[1,1,2]。1代表左,2代表右,查找对应节点是否存在即可。

代码:

class FindElements {
public:
    TreeNode *mRoot;
    FindElements(TreeNode *root)
    {
        mRoot = root;
    }

    bool find(int target)
    {
        stack<int> select;
        while (target != 0)
        {
            if (target % 2 == 0)
            {
                select.push(2);
                target = (target - 1) / 2;
            }
            else
            {
                select.push(1);
                target = (target - 1) / 2;
            }
        }
        TreeNode *selectNode = mRoot;
        while (!select.empty())
        {
            int top = select.top();
            select.pop();
            if (top == 1)
            {
                selectNode = selectNode->left;
            }
            else
            {
                selectNode = selectNode->right;
            }
            if (selectNode == nullptr)
            {
                return false;
            }
        }
        return true;
    }
};


http://lihuaxi.xjx100.cn/news/2088637.html

相关文章

【趣味学算法】兑换钱币

注&#xff1a; 本系列仅为个人学习笔记&#xff0c;学习内容为《算法小讲堂》&#xff08;视频传送门&#xff09;&#xff0c;通俗易懂适合编程入门小白&#xff0c;需要具备python语言基础&#xff0c;本人小白&#xff0c;如内容有误感谢您的批评指正 要将 50 元的软妹币兑…

QML | JavaScript 宿主环境、JavaScript 对象和函数、JavaScript环境限制

01 JavaScript 宿主环境 QML提供了为编写QML应用程序量身定做的JavaScript宿主环境,它与为浏览器和服务器端提供的宿主环境是不同的。例如,QML中没有提供在浏览器环境中常见的window对象或DOM API等。 1.公共基础 与浏览器或服务器端JavaScript环境一样,QML运行时实现了ECM…

Python安装第三方库

前言&#xff1a;大部分时候我们都是使用pip install去安装一些第三方库&#xff0c;但是偶尔也会有部分库无法安装&#xff08;最典型的就是dlib这个库&#xff09;&#xff0c;需要采取别的方法解决&#xff0c;这里做笔记记录一下。 使用国内镜像源安装 因为pypi的服务器在…

Jeecg-boot 初次启动项目失败

1.将IDEA的字符编码全部改成utf-8 2. 更改database的密码 3.换个jdk重新启动

MySQL Connector连接失败之SSL connection error: protocol version mismatch

调用 mysql_real_connect&#xff08;&#xff09; 连接失败&#xff0c;报错为ERROR 2026 (HY000): SSL connection error: protocol version mismatch 调用mysql_error&#xff08;&#xff09;查看失败原因&#xff0c;结果为 SSL connection error: protocol version …

互联网高频面:输入URL按下回车后,中间发生了什么

题目 输入URL按下回车后&#xff0c;中间发生了什么 这个问题其实是计算机网络里面很经典的一个问题&#xff0c;不能去死机硬背&#xff0c;很考察对网络架构和通信原理的理解&#xff0c;也是各个互联网大厂喜欢考察的面试题。 一些图片参考了小林的计算机网络面经 从输入…

Java开发从入门到精通(一):Java的数据结构和算法

数据结构&#xff1a; 数组&#xff08;Array&#xff09;&#xff1a;有序的元素集合&#xff0c;具有固定大小。 链表&#xff08;Linked List&#xff09;&#xff1a;由一系列节点组成的链式数据结构。 栈&#xff08;Stack&#xff09;&#xff1a;后进先出的数据结构&…

24计算机考研调剂 | 齐齐哈尔大学

2024年齐齐哈尔大学朱老师课题组招收通信与信息系统和电子信息类专业研究生调剂 考研调剂招生信息 学校:齐齐哈尔大学 专业:工学->信息与通信工程->通信与信息系统 年级:2024 招生人数:2 招生状态:正在招生中 联系方式:********* (为保护个人隐私,联系方式仅限APP…