博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法题——最近公共祖先
阅读量:2344 次
发布时间:2019-05-10

本文共 1019 字,大约阅读时间需要 3 分钟。

1. 本题知识点

二叉树、深度优先遍历

2. 题目描述

给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。

3. 解题思路

最近公共祖先和 o1,o2 有三种关系:

  1. o1,o2 分别在祖先左右两侧
  2. 祖先是 o1,o2 在祖先左/右侧
  3. 祖先是 o2,o1 在祖先左/右侧

使用 dfs 深度遍历,如果节点为 o1,o2 中其中一个直接返回,如果节点超过叶子节点也返回

4. 代码

public class Solution {
/** * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int整型 */ public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
return CommonAncestor(root, o1, o2).val; } public TreeNode CommonAncestor (TreeNode root, int o1, int o2) {
if (root == null || root.val == o1 || root.val == o2) {
// 超过叶子节点,或者root为o1、o2中的一个直接返回 return root; } TreeNode left = CommonAncestor(root.left,o1,o2); // 返回左侧的o1\o2节点 TreeNode right = CommonAncestor(root.right,o1,o2); // 返回右侧的o1\o2节点 if (left == null) {
// 都在右侧 return right; } if (right == null) {
// 都在左侧 return left; } return root; // 在左右两侧 }}

转载地址:http://ccjvb.baihongyu.com/

你可能感兴趣的文章
love2d 苹果运行
查看>>
GridBagLayout 的注意
查看>>
ajax 跨域iis6 设置
查看>>
4.0版本改动
查看>>
IE8 9 ajax no-transport ajax 问题
查看>>
oracle 启动dbconsole
查看>>
entity-framework 6解决方案中多个项目使用
查看>>
ios基础
查看>>
unity3d
查看>>
metronic 1.5
查看>>
unity3d 4 assert store
查看>>
tab bar control 注意事项
查看>>
sql优化部分总结
查看>>
IDEA运行时动态加载页面
查看>>
UML总结(对九种图的认识和如何使用Rational Rose 画图)
查看>>
js遍历输出map
查看>>
easeui分页
查看>>
20个非常有用的Java程序片段
查看>>
Enterprise Architect使用教程
查看>>
Enterprise Architect 生成项目类图
查看>>