2021-05-18

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

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

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

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


 //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 {

// x 的信息

    int x;

    TreeNode* x_parent;    //x的父节点

    int x_depth;                 //x的深度

    bool x_found = false;    //是否找到x节点

    // y 的信息

    int y;

    TreeNode* y_parent;

    int y_depth;

    bool y_found = false;

public:

// 查找x节点和y节点

void dfs(TreeNode *node,int depth,TreeNode *parent){

    if(node==NULL)

    return;

    if(node->val==x){

    tie(x_parent,x_depth,x_found)=tuple(parent,depth,true);

    }

    else if(node->val==y){

    tie(y_parent,y_depth,y_found)=tuple(parent,depth,true);

    }

    if(x_found&&y_found)

    return;

    dfs(node->left,depth+1,node);

    if(x_found&&y_found)

    return;

    dfs(node->right,depth+1,node);

}   

 bool isCousins(TreeNode* root, int x, int y) {

this->x=x;this->y=y;

dfs(root,0,nullptr);

return x_parent!=y_parent&&x_depth==y_depth;

}

};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

/十贰/

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值