/**
* 二叉树中两个节点的最低公共祖节点
*/
public class LowerAncestors {
public static Node lowerAncestors(Node head, Node o1, Node o2) {
return process(head, o1, o2).result;
}
private static ResultInfo process(Node node, Node o1, Node o2) {
if (node == null) {
return new ResultInfo(null, false, false);
}
ResultInfo leftInfo = process(node.left, o1, o2);
ResultInfo rightInfo = process(node.right, o1, o2);
boolean findO1 = node == o1 || leftInfo.findO1 || rightInfo.findO1;
boolean findO2 = node == o2 || leftInfo.findO2 || rightInfo.findO2;
Node result = leftInfo.result != null ? leftInfo.result : rightInfo.result != null ? rightInfo.result : null;
result = result == null && findO1 && findO2 ? node : result;
return new ResultInfo(result, findO1, findO2);
}
public static class ResultInfo {
public Node result;
public boolean findO1;
public boolean findO2;
public ResultInfo(Node node, boolean b1, boolean b2) {
result = node;
findO1 = b1;
findO2 = b2;
}
}
public static class Node {
public int value;
public Node left;
public Node right;
public Node(int data) {
this.value = data;
}
}
}
/* 如有意见或建议,欢迎评论区留言;如发现代码有误,欢迎批评指正 */
二叉树中两个节点的最低公共祖节点
原创
©著作权归作者所有:来自51CTO博客作者放下也不自在的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:判断二叉树是不是满二叉树
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
【数据结构】二叉树的存储结构
【数据结构】第五章——树与二叉树详细介绍二叉树的存储结构……
二叉树 数据结构 C语言 -
找二叉树中两个节点的最近的公共父节点
找二叉树中两个节点的最近的公共父节点
数据结构与算法 父节点 二叉树 -
求一个二叉树中两个节点的最近公共父节点
e root ...
递归 父节点 二叉树 -
39 二叉树中两个节点最大距离
#includeusing namespace std;
二叉树 最大深度 #include -
LeetCode 二叉树,两个子节点的最近的公共父节点
LeetCode 二叉树,两个子节点的最近的公共父节点二叉树js
最近的公共父节点 二叉树 LeetCode Algorithm js