二叉树中找到两个节点的最近公共祖先
2017-10-30 21:45
387 查看
import java.util.Ha 4000 shMap; import java.util.HashSet; /** * Created by lxw, liwei4939@126.com on 2017/10/30. * 二叉树中找到两个节点的最近公共祖先 */ public class CommonAncestor { public class Node{ int value; Node left; Node right; public Node(int data){ this.value = data; } } public Node lowestAncestor(Node head, Node n1, Node n2){ if(head == null || head == n1 || head == n2){ return head; } Node left = lowestAncestor(head.left, n1, n2); Node right = lowestAncestor(head.right, n1, n2); if(left != null && right != null){ return head; } return left != null ? left : right; } public class Record{ private HashMap<Node, Node> map = new HashMap<Node, Node>(); public Record(Node head){ if(head == null){ map.put(head, null); } setMap(head); } private void setMap(Node head){ if(head == null){ return; } if(head.left != null){ map.put(head.left, head); } if(head.right != null){ map.put(head.right, head); } setMap(head.left); setMap(head.right); } public Node query(Node n1, Node n2){ HashSet<Node> set = new HashSet<Node>(); while (map.containsKey(n1)){ set.add(n1); n1 = map.get(n1); } while (!set.contains(n2)){ n2 = map.get(n2); } } } }
相关文章推荐
- 二叉树系列---在二叉树中找到两个节点的最近公共祖先
- 在二叉树中找到两个节点的最近公共祖先
- 在二叉树中找到两个节点的最近公共祖先
- 【转载】二叉树中两个节点的最近公共祖先节点
- 二叉树中任意两个节点的最近公共祖先节点
- 寻找二叉树中两个节点的最近的公共祖先
- 在二叉树中查找两个节点的最近的公共祖先节点(无回溯指针)(NCA--nearest common ancestor)
- 求二叉树中两个节点的最近公共祖先
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 二叉树两个节点求最近的公共祖先节点java代码实现
- 利用栈结构实现二叉树的非递归遍历,求二叉树深度、叶子节点数、两个结点的最近公共祖先及二叉树结点的最大距离
- 二叉树中两个节点的最近公共祖先节点方法全集
- 求二叉树中两个节点的最近公共祖先结点
- 二叉树问题——寻找二叉树中两个节点的最近公共祖先
- 寻找二叉树两个节点的最近公共祖先
- 通过邻接矩阵找到两个节点的最近公共祖先结点
- 求二叉树中两个节点的最近公共祖先
- 求解二叉树中两个节点的最近公共祖先(LCA)
- day15之求二叉树中两个节点的最近公共祖先
- 如何找到二叉树两个节点的最近公共双亲?