二叉树的堂兄弟结点(21.5.12)

编程入门 行业动态 更新时间:2024-10-26 14:34:07

二叉树的<a href=https://www.elefans.com/category/jswz/34/1753664.html style=堂兄弟结点(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)

本文发布于:2024-02-07 05:53:24,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1753488.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:堂兄弟   结点   二叉树

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!