算法—leetcode—235

222 阅读1分钟

题目

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
235. 二叉搜索树的最近公共祖先

题目描述

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

最近公共祖先

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

思路

利用了二叉搜索树的中序遍历的有序性

1.循环迭代二叉搜索树
2.当前节点大于q、q节点时,则获取左子数为当前节点
3.当前节点小于q、q节点时,则获取右子数为当前节点
4.否在当前节点位两个节点的最近共祖先

代码

package leetcode

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

// lowestCommonAncestor
// 二叉搜索树的最近公共祖先
func lowestCommonAncestor(root, p, q *TreeNode) *TreeNode {
	for root != nil {
		if root.Val > p.Val && root.Val > q.Val {
			root = root.Left
		} else if root.Val < p.Val && root.Val < q.Val {
			root = root.Right
		} else{
            break
		}
	}
	return root
}

参考

来源:力扣(LeetCode)
链接:leetcode-cn.com/problems/lo…
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。