题解 | #在二叉树中找到两个节点的最近公共祖先#

在二叉树中找到两个节点的最近公共祖先

https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116

package main

import . "nc_tools"

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

/**
 *
 * @param root TreeNode类
 * @param o1 int整型
 * @param o2 int整型
 * @return int整型
 */
func lowestCommonAncestor(root *TreeNode, o1 int, o2 int) int {
	sta1 := make([]int, 10)
	sta2 := make([]int, 10)
	sta1, top1 := find(root, o1, sta1, 0)
	sta2, top2 := find(root, o2, sta2, 0)
	a := sta1
	b := sta2
	for i, j := top1-1, top2-1; ; {
		i--
		j--
		if i < 0 && j < 0 {
			return -1
		}
		if i < 0 {
			i = top2 - 1
			a = sta2
		}
		if j < 0 {
			j = top1 - 1
			b = sta1
		}
		if a[i] == b[j] {
			return a[i]
		}
	}
	return -1
}

func find(root *TreeNode, o int, sta []int, top int) (st []int, t int) {
	if root == nil {
		return sta, -1
	}
	if len(sta) <= top {
		sta = append(sta, root.Val)
	} else {
		sta[top] = root.Val
	}
	top++
	if root.Val == o {
		return sta, top
	}
	sta, left := find(root.Left, o, sta, top)
	if left >= 0 {
		return sta, left
	}
	return find(root.Right, o, sta, top)
}

全部评论

相关推荐

美团 后端开发 总包n(15%是股票)
点赞 评论 收藏
分享
11-09 17:30
门头沟学院 Java
TYUT太摆金星:我也是,好几个华为的社招找我了
点赞 评论 收藏
分享
11-15 18:39
已编辑
西安交通大学 Java
全村最靓的仔仔:卧槽,佬啥bg呢,本也是西交么
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务