千家信息网

python二叉树的最近公共祖先如何理解

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这篇文章将为大家详细讲解有关python二叉树的最近公共祖先如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。给定一个二叉树, 找到该树中两个指定
千家信息网最后更新 2026年10月31日python二叉树的最近公共祖先如何理解

这篇文章将为大家详细讲解有关python二叉树的最近公共祖先如何理解,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

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

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

例如,给定如下二叉树: root = [3,5,1,6,2,0,8,null,null,7,4]

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1 输出: 3 解释: 节点 5 和节点 1 的最近公共祖先是节点 3。

示例 2:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4

答案:

1public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
2 if (root == null || root == p || root == q)
3 return root;
4 TreeNode left = lowestCommonAncestor(root.left, p, q);
5 TreeNode right = lowestCommonAncestor(root.right, p, q);
6 return left == null ? right : right == null ? left : root;
7}

解析:

通过递归的方式,分别从他的左右两个子节点往下找,如果都不为空,说明他们最近的公共祖先节点肯定是当前root节点,如果有一个为空,说明他们最近的公共祖先节点在另一个在子节点上。这种解法和DFS很像,先从最左端的叶子节点开始找起,然后再网上回溯,下面再来看一种解法

 1public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
2 Map parent = new HashMap<>();
3 Deque stack = new ArrayDeque<>();
4 parent.put(root, null);
5 stack.push(root);
6 while (!parent.containsKey(p) || !parent.containsKey(q)) {
7 TreeNode node = stack.pop();
8 if (node.right != null) {
9 parent.put(node.right, node);
10 stack.push(node.right);
11 }
12 if (node.left != null) {
13 parent.put(node.left, node);
14 stack.push(node.left);
15 }
16 }
17 Set ancestors = new HashSet<>();
18 while (p != null) {
19 ancestors.add(p);
20 p = parent.get(p);
21 }
22 while (!ancestors.contains(q))
23 q = parent.get(q);
24 return q;
25}

Map中key记录的是当前节点,value记录的是当前节点的父节点,第一个while循环使用的是DFS,直到找到p和q节点为止,第二个while循环会把p节点以及他的的父节点,以及父节点的父节点……都加入到ancestors集合中,第3个while循环不断的取出q节点和他的父节点以及父节点的父节点……直到在ancestors中能找到为止,找到的那个正好即是p的祖先节点也同时是q的祖先节点,同时也是最近的。

关于python二叉树的最近公共祖先如何理解就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

节点 祖先 两个 循环 内容 同时 文章 更多 知识 示例 篇文章 结点 解法 输入 不错 循环不断 不断 叶子 尽可能 方式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技海报 华服互联网科技怎么样 互联网科技公司经营范围 互联网科技公司华为 深圳恒合互联网络科技有限公司 重庆互联网络科技 与互联网科技公司 金融科技和互联网金融 盛创互联网科技有限公司 西藏七维空间互联网科技有限公司 济南华为互联网科技产业总部基地 常德市电业局互联网科技部 中化能源互联网科技招聘 广州富喜互联网络科技 皮皮虾互联网科技有限公司 风投北京互联网科技 九思连强互联网电子科技有限公司 互联网科技手机排行榜 互联网科技企业商标注意事项 互联网科技收购价值 互联网科技工作委员会主任 网络科技有限互联网 互联网科技视频素材 互联网养老 桔豆科技 互联网对科技的发展 互联网科技公司有风险吗 互联网保险科技创业 翼展科技 首家互联网医院 高科技互联网发展前景如何 黑科技 体验场景 互联网大会
0