对树的考察在于使用递归方法(使用递归的方式)
package suanfa;
/**求一个二叉树中两个节点的最近公共父节点
*/
public class LowestCommonAncestor {
public static void main(String[] args) {
// TODO Auto-generated method stub
// TreeNode root = buildTree();
TreeNode treeNode1 = new TreeNode(1, null, null);
TreeNode treeNode2 = new TreeNode(2, null, null);
TreeNode treeNode3 = new TreeNode(3, null, null);
TreeNode treeNode4 = new TreeNode(4, null, null);
TreeNode treeNode5 = new TreeNode(5, null, null);
TreeNode treeNode6 = new TreeNode(6, null, null);
treeNode1.left = treeNode2;
treeNode1.right = treeNode3;
treeNode2.left = treeNode4;
treeNode2.right = treeNode5;
treeNode4.right = treeNode6;
TreeNode lowestCommonAncestor = getLowestCommonAncestor(treeNode1, treeNode5, treeNode6);
System.out.println(lowestCommonAncestor.data);
}
/**
* 查找公共祖先
* @param root
* @param p
* @param q
* @return
*/
public static TreeNode getLowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q) {
if (root == null) return root;
if (root == p || root == q ) return root;
TreeNode leftN = getLowestCommonAncestor(root.left, p, q);
TreeNode rightN = getLowestCommonAncestor(root.right, p, q);
if (leftN != null && rightN !=null) return root;
if (leftN == null) return rightN;
return leftN;
}
/* public static TreeNode buildTree() {
TreeNode treeNode1 = new TreeNode(1, null, null);
TreeNode treeNode2 = new TreeNode(2, null, null);
TreeNode treeNode3 = new TreeNode(3, null, null);
TreeNode treeNode4 = new TreeNode(4, null, null);
TreeNode treeNode5 = new TreeNode(5, null, null);
TreeNode treeNode6 = new TreeNode(6, null, null);
treeNode1.left = treeNode2;
treeNode1.right = treeNode3;
treeNode2.left = treeNode4;
treeNode2.right = treeNode5;
treeNode4.right = treeNode6;
return treeNode1;
}*/
}