二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
分析:递归三部曲。有返回值时,子节点的返回值如何界定
#include "_myPrint.cpp"
#include "stack"
#include "queue"
using namespace std;
class Solution{
public:
TreeNode* searchCommonAcent(TreeNode* root, TreeNode* q, TreeNode* p){
if (!root || root == q || root == p) return root;
TreeNode* left = searchCommonAcent(root -> left, q, p);
TreeNode* right = searchCommonAcent(root -> right, q, p);
if (left && right) return root;
else if (!left) return right;
else if (!right) return left;
else return NULL;
}
};
int main(){
Solution s;
TreeNode* root = new TreeNode(8);
TreeNode* l = new TreeNode(7);
TreeNode* r = new TreeNode(9);
TreeNode* lr = new TreeNode(7);
TreeNode* rl = new TreeNode(8);
root->left = l;
root->right = r;
l->right = lr;
r->left=rl;
TreeNode* res = s.searchCommonAcent(root, lr, rl);
cout << res -> val << endl;
}
|