题目

 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行代码别忘记,一定要提前记录每一层的个数

最新文章

  1. 【转】Windows 窗口层次关系
  2. LruCache为GridView异步加载大量网络图片
  3. 自定义组件-支持PNG图片的多态GraphicButton
  4. 将text 文件转为List
  5. flume系列之—flume ng使用demo
  6. 10.25 noip模拟试题
  7. NumberBox( 数值输入框) 组件
  8. 当tomcat有两个链接数据库的应用同时运行可能冲突
  9. 一个人ACM(我们赶上了ACM)
  10. MySQL之乱码问题解决详解
  11. 函数&amp;闭包
  12. Flask技术问题汇总
  13. vue搭配axios踩坑
  14. redis点
  15. es6学习笔记2-—symbol、变量与作用域
  16. usb3.0 monitor is already started
  17. iOS:在cell中使用倒计时的最佳方法
  18. Linux用户态程序计时方式详解
  19. Docker 安装Centos,Tomcat,Jdk等相关的自定义(Dockerfile)镜像
  20. Chapter 3 Phenomenon——15

热门文章

  1. UML—20—001
  2. Java中中文排序器
  3. git 上传 + 分支
  4. Linux 修改权限,查看进程,结束进程 命令
  5. sqoop用法之mysql与hive数据导入导出
  6. Python进阶——什么是上下文管理器?
  7. C# Attribute特性 泛型&lt;T&gt; 方法的out ref this(扩展方法) Equals与==
  8. 神奇的 SQL 之擦肩而过 → 真的用到索引了吗
  9. UICamera 编辑器与移动设备下的Find异常
  10. Guns自动化生成代码使用