
剑指 Offer 68 - II. 二叉树的最近公共祖先
发布日期:2021-05-07 18:26:25
浏览次数:25
分类:精选文章
本文共 973 字,大约阅读时间需要 3 分钟。
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */class Solution { public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) { if(root == null) return null; // 如果树为空,直接返回null if(root == p || root == q) return root; // 如果 p和q中有等于 root的,那么它们的最近公共祖先即为root(一个节点也可以是它自己的祖先) TreeNode left = lowestCommonAncestor(root.left, p, q); // 递归遍历左子树,只要在左子树中找到了p或q,则先找到谁就返回谁 TreeNode right = lowestCommonAncestor(root.right, p, q); // 递归遍历右子树,只要在右子树中找到了p或q,则先找到谁就返回谁 if(left == null) return right; // 如果在左子树中 p和 q都找不到,则 p和 q一定都在右子树中,右子树中先遍历到的那个就是最近公共祖先(一个节点也可以是它自己的祖先) else if(right == null) return left; // 否则,如果 left不为空,在左子树中有找到节点(p或q),这时候要再判断一下右子树中的情况,如果在右子树中,p和q都找不到,则 p和q一定都在左子树中,左子树中先遍历到的那个就是最近公共祖先(一个节点也可以是它自己的祖先) else return root; //否则,当 left和 right均不为空时,说明 p、q节点分别在 root异侧, 最近公共祖先即为 root }}
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年04月04日 06时20分13秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
函数求偏移量
2021-05-08
STM8 GPIO模式
2021-05-08
python多态和封装
2021-05-08
STM32boot启动
2021-05-08
.netcore-abp-其它开源模块
2021-05-08
.net core2.2 SignalR多人聊天
2021-05-08
回调函数(callback function)
2021-05-08
omnet++
2021-05-08
23种设计模式一:单例模式
2021-05-08
Qt中的析构函数
2021-05-08
CSharp中委托(一)委托、匿名函数、lambda表达式、多播委托、窗体传值、泛型委托
2021-05-08
二叉堆的c++模板类实现
2021-05-08
C语言实现dijkstra(adjacence matrix)
2021-05-08
C#学习笔记(十四)事件(一)通知
2021-05-08
SQL Server SQL语句调优技巧
2021-05-08
用C#实现封装-徐新帅-专题视频课程
2021-05-08
C语言学习从初级到精通的疯狂实战教程-徐新帅-专题视频课程
2021-05-08
三层框架+sql server数据库 实战教学-徐新帅-专题视频课程
2021-05-08
NAT工作原理
2021-05-08
Processes, threads and goroutines
2021-05-08