寻找堂兄弟c++代码
时间: 2023-10-02 16:13:49 浏览: 66
以下是两种寻找堂兄弟节点的代码示例:
示例代码一:
```cpp
class Solution {
public:
bool isCousins(TreeNode* root, int x, int y) {
queue<TreeNode*> q;
bool fx = false, fy = false;
q.push(root);
while(!q.empty()) {
fx = fy = false;
int len = q.size();
for(int i = 0; i < len; i++) {
TreeNode* t = q.front();
q.pop();
if(t->left && t->right) {
if((t->left->val == x && t->right->val == y) || (t->left->val == y && t->right->val == x)) {
return false;
}
}
if(t->val == x) {
fx = true;
}
if(t->val == y) {
fy = true;
}
if(fx && fy) {
return true;
}
if(t->left) {
q.push(t->left);
}
if(t->right) {
q.push(t->right);
}
}
}
return false;
}
};
```
示例代码二:
```cpp
class Solution {
public:
bool isCousins(TreeNode* root, int x, int y) {
queue<TreeNode*> q;
vector<int> v;
TreeNode* t;
int sz;
if(root == NULL) {
return false;
}
q.push(root);
while(!q.empty()) {
sz = q.size();
while(sz--) {
t = q.front();
q.pop();
v.push_back(t->val);
if(t->left != NULL) {
q.push(t->left);
}
if(t->right != NULL) {
q.push(t->right);
}
if(t->left != NULL && t->right != NULL) {
if((t->right->val == x && t->left->val == y) || (t->right->val == y && t->left->val == x)) {
return false;
}
}
}
int flagx = 0, flagy = 0;
for(vector<int>::iterator it = v.begin(); it != v.end(); it++) {
if(*it == x) {
flagx = 1;
}
if(*it == y) {
flagy = 1;
}
}
if(flagx == 1 && flagy == 1) {
return true;
}
v.clear();
}
return false;
}
};
```
这两种代码都可以用于寻找二叉树中是否存在堂兄弟节点的情况。它们使用了层次遍历的方法,分别在每一层中检查是否存在x和y节点,并记录它们的状态。如果在同一层中找到了x和y节点,则返回true,否则返回false。