1、题目描述
给定一棵二叉树和二叉树中的两个节点,找出这两个节点的公共祖先节点。例如:
给定两个节点p = 5, q = 4,那么p和q的最小的公共祖先节点为5。
2、解题思路
可以分别使用两个数组来保存从根节点到给定的两个节点的路径值,然后再从路径中找出最后一个相同的路径,即为这两个节点的最小公共祖先节点。代码如下:
vector<TreeNode*> p_array;
vector<TreeNode*> q_array;
vector<TreeNode*> temp;
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if(root==nullptr)
return nullptr;
find(root,p,q);
int i;
for(i = 0;i<p_array.size()&&i<q_array.size();i++){
if(p_array[i]==q_array[i])
continue;
else
break;
}
return p_array[i-1];
}
void find(TreeNode* root,TreeNode *p, TreeNode