1、描述

993在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。

如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。

我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。

只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/cousins-in-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2、关键字

二叉树,堂兄弟,

3、思路

堂兄弟,肯定在同一层,想到BFS,又不能在一层之中的数组中,按下标相差大于1来判定,因为没说是满二叉树,

堂兄弟的特点:1,父节点不同,2、深度相同,在同一层。

还是常规的BFS,写法。把亲兄弟排除之后。
设置一个全局变量,来统计当前一层,出现x,或者y了没有,如果出现,就修改标记,只有在同一层同时修改两次标记,才是堂兄弟。

4、notes

那个标志位,点赞。
亲兄弟排除那一行,够长够暴力。

5、复杂度;

时间:O(N)遍历n个节点,
空间:O(N),如果是满二叉树,最后一层,的兄弟节点,空间<(n/2)

6、code

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {public:bool isCousins(TreeNode* root, int x, int y) {int flag=2;//设置标志位,最后的结果queue<TreeNode *> que;  // 每一层的队列que.push(root);  // 初始化while(!que.empty()){    // 外层int longth=que.size();  // 获取层长度, 一般只一行while(longth--){auto tem=que.front();  // 获取第一个元素,然后删除que.pop();if(tem->left&& tem->right&&((tem->left->val==x&&tem->right->val==y)||(tem->left->val==y&&tem->right->val==x)))  // 如果是亲兄弟,直接falsereturn false;if(tem->left!=nullptr)  // 如果左子树非空,进队列{que.push(tem->left);if(tem->left->val==x||tem->left->val==y)  // 如果子树的值是其中之一,就flag -1flag--;}if(tem->right){que.push(tem->right);if(tem->right->val==x||tem->right->val==y)flag--;}}if(flag==0) return true;  // 一层循环结束之后,判断一次结果if(flag==1) return false;  // 不在同一层}                              //如果flag==2,则继续循环下一层寻找return false;}
};

二叉树的堂兄弟节点判断001相关推荐

  1. 【leetcode 993】【二叉树的堂兄弟节点】

    leetcode 993[二叉树的堂兄弟节点] 这道题给出二叉树root,x和y,要解决的问题是在树中找到x和y,并且确定它们是否为堂兄弟节点的关系. 题目链接 https://leetcode-cn ...

  2. 二叉树的堂兄弟节点-c语言

    二叉树的堂兄弟节点-c语言 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出 ...

  3. 二叉树的堂兄弟节点(2种实现方式)

    二叉树的堂兄弟节点 题目 二叉树的堂兄弟节点(力扣:993) 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但父节点不同,则它 ...

  4. LeetCode题解——二叉树的堂兄弟节点

    LeetCode题解--二叉树的堂兄弟节点 题目介绍 解题思路 这题考察的就是树的遍历,其中带有2个条件遍历树 第一个条件记录下x和y出现的深度 第二个条件记录下x和y的父节点 当父节点不同xy深度相 ...

  5. ⭐算法入门⭐《二叉树》简单07 —— LeetCode 993. 二叉树的堂兄弟节点

    文章目录 一.题目 1.题目描述 2.基础框架 3.原题链接 二.解题报告 1.思路分析 2.时间复杂度 3.代码详解 三.本题小知识 四.加群须知 一.题目 1.题目描述   在二叉树中,根节点位于 ...

  6. 文巾解题 leetcode993. 二叉树的堂兄弟节点

    1,题目描述 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的 ...

  7. LeetCode 993. 二叉树的堂兄弟节点(层序遍历)

    文章目录 1. 题目 2. 解题 2.1 层序遍历 2.2 递归查找 1. 题目 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同 ...

  8. leetcode——第993题——二叉树的堂兄弟节点

    题目: 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点. 我们给出了具有唯一值的二叉树 ...

  9. LeetCode 993. 二叉树的堂兄弟节点

    截止到目前我已经写了 600多道算法题,其中部分已经整理成了pdf文档,目前总共有1000多页(并且还会不断的增加),大家可以免费下载 下载链接:https://pan.baidu.com/s/1hj ...

最新文章

  1. 自动写作、RNN基本原理以及LSTM的基本原理
  2. TSNE 附有codechina代码
  3. 【图像处理opencv】_Jupyter 更改文件默认保存目录
  4. 《多核与GPU编程:工具、方法及实践》----1.5 并行程序性能的预测与测量
  5. HDU1247Hat’s Words(字典树)
  6. 51nod-有限背包计数问题【dp】
  7. 配置Ubuntu系统环境变量
  8. 安卓PHP maker汉化,android 百度地图marker添加自定义视图
  9. FPGA RTL级设计原则
  10. 写给Android开发者的混淆使用手册
  11. 计算机应用技术专业考试试题,全国专业技术人员计算机应用能力考试模拟试题笔试题.docx...
  12. python和c语言的区别-C语言、Java语言和python语言的区别在哪里
  13. 已解决(Python语法报错)SyntaxError invalid syntax
  14. Python之爬虫之BeautifulSoup学习
  15. java简单小程序输出所有汉字代码实例
  16. Flutter——实现flow布局,自定义绘制子控件
  17. PHP程序提示验证码错误的问题(输入了正确的验证码)
  18. 一、Arduino介绍
  19. 手机短信验证码的实现
  20. 【大数据】Hadoop 体系(四)

热门文章

  1. mysql innodb 数据打捞(一)innodb 页面结构特征
  2. 支付系统-财务记账 复式记账 借贷
  3. 【English】主语从句的引导词是如何选择?
  4. 机房布线网络布线之常用兵器谱
  5. 伦敦旅游必玩的密室逃脱体验——《神探夏洛克:官方现场游戏》
  6. 免费QQ群管助手-帮你管理QQ群
  7. 远远被大家低估了的实用智能家居设备——窗帘电机
  8. Chart.js使用(一)
  9. C1073 涉及增量编译的内部错误(编译器文件“d:\agent\_work\4\s\src\vctools\Compiler\CxxFE\sl
  10. 详细介绍百度ERNIE 2.0:A Continual Pre-Training Framework for Language Understanding