题目描述
如果二叉树的两个节点深度相同,但父节点不同,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root,以及树中两个不同节点的值 x 和 y。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true。否则,返回 false。
解题思路
- 一拿到题完全蒙蔽…我怕是个弱智
- 看了题解,基本都是深度优先的思路
- 下面这个是代码比较简单易懂的
- 暴露自己的缺点是C++功底很不够,对于指针,全局变量都有掌握不足的情况
- 遇到数据结构题直接蒙蔽
class Solution {
public:
TreeNode* p1=NULL;
TreeNode* p2=NULL;
int h1=-1,h2=-1;
void dfs(TreeNode* root,int x,int y,int h){
if(!root) return;
if(root->left&&root->left->val==x){
p1=root;h1=h;
}
if(root->right&&root->right->val==x){
p1=root;h1=h;
}
if(root->left&&root->left->val==y){
p2=root;h2=h;
}
if(root->right&&root->right->val==y){
p2=root;h2=h;
}
dfs(root->left,x,y,h+1);
dfs(root->right,x,y,h+1);
}
bool isCousins(TreeNode* root, int x, int y) {
dfs(root,x,y,0);
return (h1==h2)&&(p1!=p2);
}
};
本文介绍了一种使用深度优先搜索(DFS)策略解决二叉树中堂兄弟节点判断问题的方法。通过记录目标节点的父节点和深度,可以有效地确定两节点是否为堂兄弟。文章详细解释了C++代码实现细节。
1486

被折叠的 条评论
为什么被折叠?



