例子
代码如下:
Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
//查找树的位置
int FindTree(struct TreeNode* alt, struct TreeNode* n)
{
if (alt == NULL)
return 0;
if (alt == n)
return 1;
int left = FindTree(alt->left, n)//往左查
int right = FindTree(alt->right, n);//往右查
if (left == 1)
return 1;
if (right == 1)
return 1;
return 0;
}
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q)
{
if (root == NULL)
return 0;
if (root == p || root == q)//当q或者p其中一个为root时,值返回root。
return root;
//设计参数储存 p和q 的左树
int pleft = FindTree(root->left, p);
int qleft = FindTree(root->left, q);
if (qleft == 1 && pleft == 1)//q和p都在左边的时候
return lowestCommonAncestor(root->left, p, q);
if (qleft == 0 && pleft == 0)//q和p都在右边的时候
return lowestCommonAncestor(root->right, p, q);
else//一左一右,直接返回root
return root;
}
递归思路。·