LeetCode993. 二叉树的堂兄弟节点
题目
1 class Solution {
2 public:
3 TreeNode* r1;TreeNode* r2;
4 bool isCousins(TreeNode* root, int x, int y) {
5 dfs(root,r1,x);
6 dfs(root,r2,y);
7 int h_x = Depth(root,x);
8 int h_y = Depth(root,y);
9 if(h_x == h_y && r1 != r2) return true;
10 return false;
11 }
12 void dfs(TreeNode* root,TreeNode* &r,int v){
13 if(root!= NULL) {
14 dfs(root->left,r,v);
15 if(root->left &&root->left->val == v ) r = root;
16 if(root->right && root->right->val == v) r = root;
17 dfs(root->right,r,v);
18 }
19 }
20 int Depth(TreeNode* root,int v){
21 if(root == NULL) return -1;
22 if(root->val == v) return 0;
23 //TreeNode* node;
24 queue<TreeNode*>q;
25 q.push(root);
26 int depth = 0;
27 while(!q.empty()){
28 int num = q.size(); //一定要有这句,否则会影响下面循环次数
29 for(int i = 0;i < num;i++){
30 TreeNode* node = q.front();q.pop();
31 if(node->val == v) return depth;
32 if(node->left != NULL) q.push(node->left);
33 if(node->right != NULL) q.push(node->right);
34 }
35 depth++;
36 }
37 return depth;
38 }
39 };
注意:
1.依旧是函数的形参为指针情况,如果想要保存对指针的修改需要址传递 如dfs中 TreeNode* &r
2.第28行代码别忘记,一定要提前记录每一层的个数
LeetCode993. 二叉树的堂兄弟节点的更多相关文章
- [Swift]LeetCode993. 二叉树的堂兄弟节点 | Cousins in Binary Tree
In a binary tree, the root node is at depth 0, and children of each depth k node are at depth k+1. T ...
- Leetcode 993. 二叉树的堂兄弟节点
993. 二叉树的堂兄弟节点 显示英文描述 我的提交返回竞赛 用户通过次数195 用户尝试次数229 通过次数195 提交次数462 题目难度Easy 在二叉树中,根节点位于深度 0 处,每个深 ...
- 【js】Leetcode每日一题-二叉树的堂兄弟节点
[js]Leetcode每日一题-二叉树的堂兄弟节点 [题目描述] 在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处. 如果二叉树的两个节点深度相同,但 父节点不 ...
- javascript数据结构与算法---二叉树(删除节点)
javascript数据结构与算法---二叉树(删除节点) function Node(data,left,right) { this.data = data; this.left = left; t ...
- leetcode 235 236 二叉树两个节点的最近公共祖先
描述: 给定二叉树两个节点,求其最近公共祖先.最近即所有公共祖先中深度最深的. ps:自身也算自身的祖先. 235题解决: 这是二叉搜索树,有序的,左边小右边大. TreeNode* lowestCo ...
- 【剑指offer】输入一颗二叉树的根节点,判断是不是平衡二叉树,C++实现
原创博文,转载请注明出处! # 题目 # 举例 # 思路 由平衡二叉树的定义可知,判断二叉树是否是平衡二叉树的关键在于判断任意结点是否是平衡结点.后序遍历二叉树,判断节点的子树是否平衡并计算节点的子树 ...
- 剑指offer22:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
1 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 2 思路和方法 使用一个队列存放节点.先将根节点加入到队列中,然后循环遍历队列中的元素,遍历过程中,访问该节点的左右子节点,再将左 ...
- python二叉树及叶节点获取 (面试题)
才疏学浅,智商不够,花了一晚上看了二叉树.记录一下: 1.二叉树的遍历 前序遍历:根节点->左子树->右子树 中序遍历:左子树->根节点->右子树 后序遍历:左子树->右 ...
- 二叉树中两节点的最近公共父节点(360的c++一面问题)
面试官的问题:写一个函数 TreeNode* Find(TreeNode* root, TreeNode* p, TreeNode* q) ,返回二叉树中p和q的最近公共父节点. 本人反应:当时有点 ...
随机推荐
- ssm的pom配置
<!--引入ssm依赖--> <!--常量和版本号 --> <properties> <!-- 文件编码 --> <project.build.s ...
- MySQL高可用(一)主备同步:MySQL是如何保证主备一致的
主备同步,也叫主从复制,是MySQL提供的一种高可用的解决方案,保证主备数据一致性的解决方案. 在生产环境中,会有很多不可控因素,例如数据库服务挂了.为了保证应用的高可用,数据库也必须要是高可用的. ...
- 关于BAPI_ACC_DOCUMENT_POST解读
BAPI_ACC_DOCUMENT_POST是SAP ERP提供生成会计凭证的标准BAPI,这个BAPI可以用到多种场景生成会计凭证,实际项目中一般情况下更多的是生成应收和应付的会计凭证,分别对应客户 ...
- RHCSA 复习
1.用户 # -->当前用户为root用户 $ -->当前用户为普通用户 [root@fafa ~]# su - 用户 ----切换用户 2.查看.修改主机名: ***保存在/etc/ ...
- Python 最简单的数字相乘
风变编程第18关,快要结束了,捎带着复习了一下前面的基础.结果悲剧了. 打开题目是这样的: 比如我们想写一个根据圆的半径(R)来求面积(S)和周长(L)的代码,可以画出以下的流程图 抬眼一看,好简单的 ...
- [LeetCode]654. Maximum Binary Tree最大堆二叉树
每次找到数组中的最大值,然后递归的构建左右树 public TreeNode constructMaximumBinaryTree(int[] nums) { if (nums.length==0) ...
- Java学习日报7.18
/** * *//** * @author 86152 * */ package trangle;import java.util.Scanner; public class Trangle{ pub ...
- jstat gcutil
QQA: jstat gcutil 的输出是什么意思 当 Java 程序有性能问题时,尤其是响应时间有突然变化时,最好第一时间查看 GC 的状态.一般用 jstat -gcutil <pid&g ...
- 关于try catch块执行流程
代码: package test; public class FinallyTest { public static void main(String[] args) { try { // proce ...
- light-rtc: 理念与实践
在与同行交流过程中,发现很多同行对 WebRTC 改动太多,导致无法升级 WebRTC 版本.而 WebRTC 开源社区的快速迭代,让他们感到欣喜又焦虑:开源社区的迭代效果,是不是超过了他们对 Web ...