写点什么

[Day31-04]-[二叉树] 二叉树的堂兄弟节点

作者:方勇(gopher)
  • 2022 年 4 月 30 日
  • 本文字数:891 字

    阅读完需:约 3 分钟

993. 二叉树的堂兄弟节点

在二叉树中,根节点位于深度 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
复制代码

题解

func TestIsCousins(t *testing.T) {	root := &TreeNode{ // 初始化树		Val: 1,		Left: &TreeNode{			Val: 2,			Left: &TreeNode{				Val: 3,			},		},		Right: &TreeNode{			Val: 4,			Left: &TreeNode{				Val: 5,			},		},	}	// 题解:x,y如果要是堂兄弟节点,则必须深度相等且父节点不相等,在遍历整棵树的时候	// 检测到val=x||val=y的时候,记录当前的深度 和 父节点信息	// 最后判断 是否找到了x或者y,并检查x,y的深度及各自的父节点	var x, y = 3, 5                // 目标值	var xDepth, yDepth int         // x,y 深度	var xFount, yFound bool        // x,y深度	var xParent, yParent *TreeNode // x,y 父节点	var dfs func(root *TreeNode, parent *TreeNode, level int)	dfs = func(root *TreeNode, parent *TreeNode, level int) {		if root == nil { // 遍历完成			return		}		if root.Val == x { // 记录x的相关信息			xFount, xParent, xDepth = true, parent, level		} else if root.Val == y { // 记录y的相关信息			yFound, yParent, yDepth = true, parent, level		}
if xFount && yFound { // 如果找了提前退出 return }
dfs(root.Left, root, level+1) if xFount && yFound { // 如果找到了提前结束 return } dfs(root.Right, root, level+1) }
dfs(root, nil, 0) res := xFount && yFound && (xDepth == yDepth) && (xParent != yParent) t.Log(res)}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
[Day31-04]-[二叉树]二叉树的堂兄弟节点_LeetCode_方勇(gopher)_InfoQ写作社区