题目很好理解,即求一棵二叉树中两个节点的公共祖先。
我的解题思路是使用DFS,求出从根节点到两个待查节点各自的路径,然后从头开始比较两个路径,最后一个相等的节点即为公共祖先节点。完整代码如下。
class Solution { public: //DFS代码 void findNode(TreeNode* root, TreeNode* toFind, vector<TreeNode*> &curPath, bool& find){ if(root -> val == toFind -> val){ curPath.push_back(root); find = true; return; } if(root == nullptr) return; curPath.push_back(root); if(root -> left != nullptr){ findNode(root -> left, toFind, curPath, find); if(find == true) return; curPath.pop_back(); } if(root -> right != nullptr){ findNode(root -> right, toFind, curPath, find); if(find == true) return; curPath.pop_back(); } } TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) { //路径放在两个vector中 vector<TreeNode*> pPath, qPath; TreeNode* result; bool pFind = false, qFind = false; //查找两个路径 findNode(root, p, pPath, pFind); findNode(root, q, qPath, qFind); if(qFind == false || pFind == false) return nullptr; //从得到的路径查找公共祖先 for(int index = 0; index < pPath.size() && index < qPath.size() && qPath[index] -> val == pPath[index] -> val; index++){ result = pPath[index]; } return result; } };
版权声明:本文为博主原创文章,未经博主允许不得转载。
Lowest Common Ancestor of a Binary Search Tree
原文地址:http://blog.csdn.net/ny_mg/article/details/46846591