题目:求一棵二叉树中两个节点的最低公共父节点
思路:递归 和 非递归
public static TreeNode getLastCommonParentRec(TreeNode root, TreeNode node1, TreeNode node2) { if (found(root.left, node1)) { if (found(root.right, node2)) { return root; } else { return getLastCommonParentRec(root.left, node1, node2); } } else { if (found(root.left, node2)) { return root; } else { return getLastCommonParentRec(root.right, node1, node2); } } } public static boolean found(TreeNode root, TreeNode node) { if (root == null || node == null) return false; if (root == node) return true; boolean found = found(root.left, node); if (!found) { found = found(root.right, node); } return found; }
简洁版递归:
public static TreeNode getLastCommonParentRec2(TreeNode root, TreeNode node1, TreeNode node2) { if (root == null) return null; if (root.equals(node1) || root.equals(node2)) { return root; } TreeNode left = getLastCommonParentRec2(root.left, node1, node2); TreeNode right = getLastCommonParentRec2(root.right, node1, node2); if (left != null && right != null) { return root; } if (left != null) return left; return right; }