2021年02月11日 周四 天气晴 【不悲叹过去,不荒废现在,不惧怕未来】
本文目录
1. 问题简介
2. 后序遍历 DFS
二叉树的后序遍历,分情况进行讨论,具体看注释,解释的比较清楚。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
// 终止条件:如果p和q中有等于root的,那么它们的最近公共祖先即为root(一个节点也可以是它自己的祖先)
if(root==nullptr || root==p || root==q) return root;
// 如果left不为空,说明左边有p或q
TreeNode* left = lowestCommonAncestor(root->left,p,q);
// 如果right不为空,说明右边有p或q
TreeNode* right = lowestCommonAncestor(root->right,p,q);
// 如果left为空,说明左边没有p或q,p和q都在右边,返回右边的结果
if(left==nullptr) return right;
// 如果right为空,说明右边没有p或q,p和q都在右边,返回右边的结果
else if(right==nullptr) return left;
// 如果left和right都不为空,说明两边各有一个,最近公共祖先是root(对应情况1)
return root;
}
};
参考文献
《剑指offer 第二版》
https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/solution/mian-shi-ti-68-ii-er-cha-shu-de-zui-jin-gong-gon-7/