使用后序遍历树可以找到公共祖先
- 如果左右子树都不等于NULL 说明已经找到了两个节点,并且一个节点在左边,一个节点在右边,当前节点是最小的公共节点。
- 否则,两个节点就在左右子树的其中一个中,哪个不空就是哪个。
- 如果全空,说明树不含有两个节点。(只含有一个的情况会出错,因为一般假定一定含有两个。)
TreeNode *getF(TreeNode* root, int s, int ed){
if (root == NULL
|| root->val == s
|| root->val == ed) {
return root;
}
TreeNode *left = getF(root->left, s, ed);
TreeNode*right = getF(root->right, s, ed);
// 如果左右都不等于空,这个就是最近公共祖先
if (left != NULL && right != NULL) {
return root;
}
// 否则,最近公共祖先
if (left != NULL) return left;
if (right != NULL) return right;
return NULL;
}