查寻任意两个节点的公共父节点

查找任意两个节点的公共父节点
基本思路是对需要查找的节点赋权值为1,其它节点权值为0.那么只要找到一个节点的左右权值都不为1的点就是需要查找的公共父节点。
static class Node {
		String value;
		Node left;
		Node right;
	}

	static Node parent;

	public static int findParent(Node root, Node first, Node second) {
		if (root == null || parent != null) {
			// Accelerate check
			return 0;
		}
		int value = 0;
		if (root == first || root == second) {
			// find the node
			value = 1;
		}
		value += findParent(root.left, first, second);
		value += findParent(root.right, first, second);
		if (value == 2) {
			// find the common parent of the first and second node
			parent = root;
			value = 0;
		}
		//
		return value;
	}


这种方法可以推广到查到n个节点的公共父节点,对每一个需要查找的节点赋值为1即可