在二叉树中找到两个节点的最近公共祖先【大厂算法面试题】

本题探讨如何在给定的非空二叉树中寻找两个节点o1和o2的最近公共祖先。解题思路是通过递归方法,判断当前节点是否为空、是否为o1或o2,然后分别遍历左子树和右子树,最后返回root节点。
摘要由CSDN通过智能技术生成

题目描述

给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
注:本题保证二叉树中每个节点的val值均不相同。

输入:[3,5,1,6,2,0,8,#,#,7,4],5,1
输出: 3

解题思路

由于递归要返回树的左子树或者右子树节点,而题目给出的返回值为int所以我们这里自己定义一个递归方法。
如果root == null 就说明root走到底了,如果root等于o1或者o2就说明o1或者o2是另一个的父节点,就直接返回root即可。
遍历其左子树和右子树,如果左子树等于null,就说明左子树里面不存在公共的祖先,就直接遍历右子树,如果右子树等于null,就说明右子树里面不存在公共的祖先,就直接遍历左子树。

最后直接返回root即可。

代码实现

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

publ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值