- 题目:
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。
如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。
- 解题思路
方法一:
基于层次遍历,每层设置标志,记录此层是否出现x,y;且若同一节点的左右孩子直接为x,y则直接返回false
代码实现:
bool isCousins(TreeNode* root, int x, int y) {
deque<TreeNode*> qu;
if(!root)
return false;
qu.push_back(root);
while(!qu.empty())
{
int size = qu.size();
bool tag1 = false, tag2 = false;
for(int i = 0; i < size; i++)
{
TreeNode* temp = qu.front();
qu.pop_front();
if(temp->left){
qu.push_back(temp->left);
if(temp->left->val == x || temp->left->val == y ){
if(tag1)
tag2 = true;
else
tag1 = true;
}
}
if(temp->right){
qu.push_back(temp->right);
if(temp->right->val == x || temp->right->val == y){
if(tag1)
tag2 = true;
else
tag1 = true;
}
}
if(temp->right && temp->left){
if(temp->left->val == x || temp->left->val == y ){
if(temp->right->val == x || temp->right->val == y)
return false;
}
}
}
if(tag1 && tag2)
return true;
}
return false;
}