码迷,mamicode.com
首页 > 其他好文 > 详细

查找二叉树两节点的最近公共父节点

时间:2016-05-16 10:51:40      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:

 1 //查找一棵树中最近公共父节点
 2 public class LCA {
 3     static boolean flag[] = new boolean[2];;
 4     
 5     public static TreeNode findLowestCommonAncestor(TreeNode head, TreeNode first, TreeNode second){
 6         travel(head, first, second);
 7         if(flag[0] == true && flag[1] == true) // 两节点都存在
 8             return lowestCommonAncestor(head, first, second);
 9         else 
10             return null;
11     }
12     
13     public static void travel(TreeNode head, TreeNode first, TreeNode second) {
14         if(head == null)
15             return;
16         
17         if(head.value == first.value)
18             flag[0] = true;
19         if(head.value == second.value)
20             flag[1] = true;
21         travel(head.left, first, second);
22         travel(head.right, first, second);
23     }
24     
25     public static TreeNode lowestCommonAncestor(TreeNode head, TreeNode first, TreeNode second) {
26         if (head == null)
27             return null;
28         
29         // 先根遍历
30         if (head.value == first.value || head.value == second.value)
31             return head;    
32         TreeNode left = lowestCommonAncestor(head.left, first, second);
33         TreeNode right = lowestCommonAncestor(head.right, first, second);
34         if ((left != null) && (right != null)) {
35             return head;
36         }
37         return left != null ? left : right;
38     }
39     
40     public static void main(String[] args) {
41         TreeNode node1 = new TreeNode(1);
42         TreeNode node2 = new TreeNode(2);
43         TreeNode node3 = new TreeNode(3);
44         TreeNode node4 = new TreeNode(4);
45         TreeNode node5 = new TreeNode(5);
46         TreeNode node6 = new TreeNode(6);
47         TreeNode node7 = new TreeNode(7);
48         node1.left = node2;
49         node1.right = node3;
50         node2.left = node4;
51         node2.right = node5;
52         node4.right = node6;
53         TreeNode result = findLowestCommonAncestor(node1, node6, node5); // 2
54 //      TreeNode result = findLowestCommonAncestor(node1, node1, node2); // 1
55 //      TreeNode result = findLowestCommonAncestor(node1, node1, node7); // null
56         
57         System.out.println(result != null ? result.value : result);
58     }
59 }
60 
61 class TreeNode {
62     TreeNode left;
63     TreeNode right;
64     int value;
65     
66     TreeNode(int value) {
67         this.value = value;
68     }
69 }

 

查找二叉树两节点的最近公共父节点

标签:

原文地址:http://www.cnblogs.com/shake-rock/p/5497195.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!