写点什么

[Day32-05]-[BST] BST 最近公共祖先

作者:方勇(gopher)
  • 2022 年 5 月 01 日
  • 本文字数:566 字

    阅读完需:约 2 分钟

235. 二叉搜索树的最近公共祖先

一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

例如,给定如下二叉搜索树:  root = [6,2,8,0,4,7,9,null,null,3,5]



示例 1:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8输出: 6 解释: 节点 2 和节点 8 的最近公共祖先是 6。
复制代码

示例 2:

输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4输出: 2解释: 节点 2 和节点 4 的最近公共祖先是 2, 因为根据定义最近公共祖先节点可以为节点本身。
复制代码

题解:

func TestLowestCommonAncestorBST(t *testing.T) {	var root = &TreeNode{		Val: 2,		Left: &TreeNode{			Val: 1,		},		Right: &TreeNode{			Val: 3,		},	}	var dfs func(root, p, q *TreeNode) *TreeNode	dfs = func(root, p, q *TreeNode) *TreeNode {		if root == nil || root == p || root == q {			return root		}		if p.Val < root.Val && q.Val < root.Val {			return dfs(root.Left, p, q)		} else if p.Val > root.Val && q.Val > root.Val {			return dfs(root.Right, p, q)		}		return root	}	t.Log(dfs(root, root.Left, root.Right))}
复制代码


用户头像

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

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

评论

发布
暂无评论
[Day32-05]-[BST] BST最近公共祖先_方勇(gopher)_InfoQ写作社区