一、题目描述
在二叉树中,根节点位于深度 0
处,每个深度为 k
的节点的子节点位于深度 k+1
处。
如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root
,以及树中两个不同节点的值 x
和 y
。
只有与值 x
和 y
对应的节点是堂兄弟节点时,才返回 true
。否则,返回 false
。
二、解题思路
可以先分别算出两个节点的深度,和两个节点的父节点,然后返回定义的逻辑表达式即可。
三、解题代码
class Solution {
public:
map<int,int>mp;
void creat(TreeNode* root)
{
if(root->left){mp[root->left->val]=root->val;creat(root->left);}
if(root->right){mp[root->right->val]=root->val;creat(root->right);}
return;
}
int leng(TreeNode* root,int c,int x)
{
if(!root)return -1;
if(root->val==x)return c;
return max(leng(root->left,c+1,x),leng(root->right,c+1,x));
}
bool isCousins(TreeNode* root, int x, int y) {
creat(root);
int xlen=leng(root,0,x);
int ylen=leng(root,0,y);
if(xlen==ylen&&mp[x]!=mp[y])return true;
return false;
}
};