面试题50. 树中两个结点的最低公共祖先结点
来源:互联网 发布:安庆四中信息编程班 编辑:程序博客网 时间:2024/06/06 05:56
面试题50. 树中两个结点的最低公共祖先结点
题目描述:
给出一个二叉树,找到两个结点的最低公共祖先。比如下面的二叉树中,5和1的最低公共祖先就是3;
4和6的最低公共祖先就是5。
_______3______ / \ ___5__ ___1__ / \ / \ 6 _2 0 8 / \ 7 4
思路:
- 如果p在左子树里,q在右子树里(或者反过来,p在右子树,q在左子树),说明当前节点为pq的最小祖先。
- 反之,说明pq要么都在左子树里,要么都在右子树里。需要分别遍历左子树和右子树。
- 用后续遍历的思想,从下往上,如果遇到了p(或q),就把p(或q)的值向上返回。以下图为例,p=3,q=9。现在要查找3和9的最近祖先。把3和9一层一层向上返回,直到6。此时6的左子树接收返回值3,右子树接收返回值9,说明6是3和9的最近祖先。
/** * 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 || root == p || root == q) { return root; } TreeNode left = lowestCommonAncestor(root.left, p, q); // 从root.left找p、q TreeNode right = lowestCommonAncestor(root.right, p, q); // 从root.right找p、q //if(left != null && right != null) return root; // 替换成下面的语句也可以 if((left == p && right == q)||(left == q && right == p)) { return root; } return (left != null) ? left : right; }}
参考:http://blog.csdn.net/u010429424/article/details/77650420
阅读全文
0 0
- 面试题50. 树中两个结点的最低公共祖先结点
- 二叉树经典面试题3~树中两个结点的最低公共祖先
- 《剑指offer》面试题50 树中两个结点的最低公共祖先
- 面试题50:树中两个结点的最低公共祖先
- 《剑指Offer》学习笔记--面试题50:树中两个结点的最低公共祖先
- 【剑指offer】 面试题50: 树中两个结点的最低公共祖先
- 【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】
- 剑指offer之面试题50树中两个结点的最低公共祖先
- 剑指offer--面试题50:树中两个结点的最低公共祖先
- 剑指offer——面试题50:树中两个结点的最低公共祖先
- 剑指offer-面试题50-树中两个结点的最低公共祖先
- 剑指offer 面试题50 树中两个结点的最低公共祖先
- 【剑指offer】 面试题50: 树中两个结点的最低公共祖先(二叉排序数)
- 树中两个结点的最低公共祖先
- 树中两个结点的最低公共祖先
- 树中两个结点的最低公共祖先
- 题目1509:树中两个结点的最低公共祖先
- 二叉树中两个结点的最低公共祖先
- 用cmake构建基于qt5.8.0的qt5项目
- 例题6-13 古代象形符号(Ancient Messages, World Finals 2011, UVa 1103)
- 机器学习中常常提到的正则化 详解
- springmvc使用CommonsMultipartFile上传
- 一 了解java
- 面试题50. 树中两个结点的最低公共祖先结点
- Spring-Bean的定义装配以及作用域的注解实现
- PAT 1005. 继续(3n+1)猜想 (25)
- Qt 之 使用 Model-View(模型视图框架)动态的加载显示数据
- linux压缩命令总结
- emacs安装
- 《超越感觉》读后感
- 关于RabbitMQ的一些问题
- 获得全表扫描的对象