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
- java--数据结构--二叉树的最近公共祖先
- 二叉树的最近公共祖先
- 满二叉树的最近公共祖先
- 二叉树的最近公共祖先LCA
- 二叉树最近公共祖先
- 二叉树最近公共祖先
- 二叉树-最近公共祖先
- 【学习点滴-数据结构-二叉树】求二叉树中某两个节点的最近公共祖先
- 【数据结构】二叉树中任意两节点的最近公共祖先节点
- 【数据结构】求二叉树中两个结点最近的公共祖先
- 寻找二叉树两节点的最近的公共祖先
- 二叉树中两个节点的最近公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 二叉树中两个节点的最近公共祖先节点
- 非搜索二叉树的最近公共祖先
- 二叉树中两个节点的最近公共祖先节点
- 求二叉树中两个节点的最近公共祖先
- 求二叉树中两个节点的最近公共祖先
- "lambda"和“bind”的初步思考
- java 通过流的方式读取远程图片并显示在jsp页面(类型以jpg、png等结尾的图片)
- linux下错误修改了/etc/profile导致虚拟机无法登录
- Unity3d面试4
- 微信分享的两个问题
- java--数据结构--二叉树的最近公共祖先
- 平台免费接口,非常实用
- DEV express 控件 在 XE2下 无法编译,说没有dcu文件
- 自定义buttonView的酷炫效果
- .Net语言 APP开发平台——Smobiler学习日志:用Gridview控件设计较复杂的表单
- ActionContext与ServletActionContext
- activity进入动画
- 卷积神经网络
- 项目实战:Android Studio与NDK的不期而遇