public Node GetCommonAncester(Node root, Node p, Node q) { if (covers(root.left, p) && covers(root.left, q)) root = GetCommonAncester(root.left, p, q); else if (covers(root.right, p) && covers(root.right, q)) root = GetCommonAncester(root.right, p, q); return root; } public bool covers(Node root, Node a) { if (root == null) return false; if (root == a) return true; else return covers(root.left, a) || covers(root.right, a); } 用了好多递归的方法,注意covers其实就是递归寻找节点是否存在在树里面。