堂兄弟结点(21.5.12)"/>
二叉树的堂兄弟结点(21.5.12)
题目描述:
在二叉树中,根节点位于深度 0 处,每个深度为 k 的节点的子节点位于深度 k+1 处。
如果二叉树的两个节点深度相同,但 父节点不同 ,则它们是一对堂兄弟节点。
我们给出了具有唯一值的二叉树的根节点 root ,以及树中两个不同节点的值 x 和 y 。
只有与值 x 和 y 对应的节点是堂兄弟节点时,才返回 true 。否则,返回 false。
示例 1:
输入:root = [1,2,3,4], x = 4, y = 3
输出:false
示例 2:
输入:root = [1,2,3,null,4,null,5], x = 5, y = 4
输出:true
示例 3:
输入:root = [1,2,3,null,4], x = 2, y = 3
输出:false
题目分析:
我们约定使用 −1 代指没有找到目标值 t,使用 0 代表找到了目标值 t,但其不存在父节点。
这道题目当然用BFS或者DFS都可以做,本题有两个关键点:
1.深度相同
2.父节点不同
代码如下:
class Solution {
public:vector<int> dfs(TreeNode* root, TreeNode* fa, int depth, int t){if(root ==NULL) return vector<int>{-1, -1};if(root->val == t){return vector<int>{fa != NULL ? fa->val : 1, depth};}vector<int> l = dfs(root->left, root, depth + 1, t);if(l[0] != -1) return l;return dfs(root->right, root, depth + 1, t);}bool isCousins(TreeNode* root, int x, int y) {vector<int> xi = dfs(root, NULL, 0, x);vector<int> yi = dfs(root, NULL, 0, y);return xi[1] == yi[1] && xi[0] != yi[0];}
};
更多推荐
二叉树的堂兄弟结点(21.5.12)
发布评论