java--数据结构--二叉树的最近公共祖先

来源:互联网 发布:火狐不支持java 编辑:程序博客网 时间:2024/05/18 03:26

1.若是二叉搜索树

思路:
如果p,q 比root小, 则LCA必定在左子树;如果p,q 比root大, 则LCA必定在右子树;若一小一大,则LCA是root

 /**  * Definition for a binary tree node.  * public class TreeNode {  *     int val;  *     TreeNode left;  *     TreeNode right;  *     TreeNode(int x) { val = x; }  * }  */ public class Solution {     public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {         if(root.val > p.val && root.val > q.val) {             return lowestCommonAncestor(root.left,p,q);         }else if(root.val < p.val && root.val < q.val) {             return lowestCommonAncestor(root.right,p,q);         }else {             return root;         }     } }

2.若是普通二叉树

思路一:
遍历判断两个node是否在左右子树中
一般递归都分为两块返回值;
第一块返回值(开头):
针对l或者r的返回,也就是标记,我自己称为小返回
第二块返回值(结尾):
l和r已经获取完毕,对上一层的返回,我自己称为大返回

public class Solution {    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        // 左右子树探索时发现目标节点,则通过返回值标记        if(root == null || p == root || q == root) {            return root;        }        // 查看左子树中是否有目标结点,没有为null        TreeNode l = lowestCommonAncestor(root.left,p,q);        // 查看右子树中是否有目标结点,没有为null        TreeNode r = lowestCommonAncestor(root.right,p,q);        //都不为空,说明做右子树都有目标结点,则公共祖先就是本身        if(l!= null && r!= null) {            return root;        }        // 其他情况,则要继续向上标记,显示此节点下边有目标节点        return l != null?l:r;    }}

思路二:
1.不是BST,则先遍历节点, 找到p,q. 记录下从root到该几点的路径.
2.比较路径,最后一个相同的节点便是LCA.

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 烧烤一顿吃多了怎么办 派派背包食物不足怎么办 未转变者下不了怎么办 小升初户籍与房产不一致怎么办 小孩在外地读书怎么办计生证明 泉州居住证要半年小孩读书怎么办 孩子上学有兰山户口没有房产怎么办 培训机构跑路了怎么办 报的培训班跑路怎么办 巡视组举报后会怎么办 巡视组交办不办怎么办 分手以后还要不要联系忘不了怎么办 父母穷且不上进怎么办 惹父母生气了该怎么办 小孩戒奶不吃奶粉怎么办 孩子听不进去话怎么办 异性好朋友喜欢自己亲吻自己怎么办 对方对你反感了怎么办 家长偷看孩子日记老师怎么办 儿子与父母相冲怎么办 初二孩子不争气老师打他怎么办? 孩子被老师打又怎么办 家里2个孩子打架怎么办 一年级的学生特别会顶嘴怎么办 私立学校的学生顶嘴老师该怎么办 孩子做错事家长不道歉怎么办 孩孑语文成绩差怎么办 高三了孩子不愿意补课怎么办 四年级的孩子上课喜欢讲小话怎么办 五年级孩子太叛逆怎么办 二年级话唠孩子怎么办 家有老人带孩子怎么办 不会看孩子。孩子一哭就害怕怎么办 孩子不老实爱动怎么办 4周孩子脾气大怎么办 老公脾气暴躁爱骂人怎么办? 当妈妈了脾气不好怎么办 父亲很坏不顾家很会赌钱怎么办 妈妈骂我很难听怎么办 父母管的太严怎么办 2岁宝宝哭闹不止怎么办