力扣993-二叉树的堂兄弟节点

二叉树的堂兄弟节点

题目链接

解题思路

  1. 题目要求我们找到x和y处于同样的深度,但是父节点不同,返回true,否则返回false
  2. dfs()函数参数解读
    1. TreeNode*root:是此时正要处理的节点
    2. int x:表示我们要寻找的x和y
    3. int fa:表示正在处理的节点的父节点的值
    4. int depth:表示此时正在处理的节点的深度
  3. dfs()函数返回一个数组,第一个值是目标节点的父节点的值,第二个值是目标节点的深度
  4. 如果说当前处理的节点为空,那么直接返回{0,0}
  5. 如果找到目标节点,则返回父节点和深度{fa,depth}
  6. 之后就是递归左子树和右子树,深度+1,父节点为当前节点的值
  7. 其实,左右子树递归时,只有一个子树包含目标值(因为所有的值只会出现一次),另一个子树返回{0,0}
  8. 所以最后返回{l[0]+r[0],l[1]+r[1]};
c++ 复制代码
/**
 * 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:
    vector<int> dfs(TreeNode* root,int x,int fa,int depth){
        if(!root) return {0,0};
        if(root->val == x) return {fa,depth};
        auto l = dfs(root->left,x,root->val,depth+1);
        auto r = dfs(root->right,x,root->val,depth+1);
        return {l[0]+r[0],l[1]+r[1]};
    }
    bool isCousins(TreeNode* root, int x, int y) {
        auto a = dfs(root,x,-1,0);
        auto b = dfs(root,y,-1,0);
        if(a[0] != b[0] && a[1] ==b[1]){
            return true;
        }else{
            return false;
        }
    }
};
相关推荐
超梦dasgg4 小时前
并查集(Union-Find)详解 + Java 完整实现
java·数据结构·算法·图搜索
仍然.4 小时前
算法题目---队列+宽搜(BFS)
算法·宽度优先
AbandonForce4 小时前
从入门到入土:二分查找算法
数据结构·算法
仰泳之鹅4 小时前
【C语言】动态内存管理
c语言·数据结构·算法
心中有国也有家4 小时前
CANN 学习新范式:cann-learning-hub 如何让昇腾入门不再「劝退」
人工智能·经验分享·笔记·学习·算法
LB21124 小时前
C++通讯录课设(西安石油大学)
开发语言·c++·算法
AI算法沐枫4 小时前
机器学习知识点:正则化
人工智能·pytorch·python·深度学习·神经网络·算法·机器学习
手写码匠4 小时前
从零实现一个轻量级向量搜索引擎(Python 版)
人工智能·深度学习·算法·aigc
学习中.........4 小时前
多目标优化:遗传算法详解
人工智能·算法·机器学习
心中有国也有家5 小时前
hixl:昇腾分布式推理的「快递专线」
人工智能·经验分享·笔记·分布式·学习·算法