c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13相关的知识,希望对你有一定的参考价值。
//递归法:
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (root == p || root == q || root == NULL) {
return root;
}
TreeNode *l = lowestCommonAncestor(root->left, p, q);
TreeNode *r = lowestCommonAncestor(root->right, p, q);
if (l && r) {
return root;
}
return l ? l : r;
}
};
//递归找寻节点,匹配最长公共路径:
class Solution {
public:
// 找寻路径数组
bool dfs(TreeNode* root, TreeNode *t, vector<TreeNode *>& tV) {
if (root == NULL) {
return false;
}
tV.push_back(root);
if (root == t) {
return true;
}
if (dfs(root->left, t, tV)) {
return true;
}
if (dfs(root->right, t, tV)) {
return true;
}
tV.pop_back();
return false;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
vector <TreeNode *> pDFSVec;
dfs(root, p, pDFSVec);
vector <TreeNode *> qDFSVec;
dfs(root, q, qDFSVec);
TreeNode *re;
// 匹配公共节点
for (int i = 0; i < min(pDFSVec.size(), qDFSVec.size()); i++) {
if (pDFSVec[i] != qDFSVec[i]) {
break;
}
re = pDFSVec[i];
}
return re;
}
};
以上是关于c_cpp 236.二叉树的最低共同祖先 - 难度中等 - 2018.9.13的主要内容,如果未能解决你的问题,请参考以下文章
236. 二叉树的最近公共祖先[中等]
java 二叉树的最低共同祖先
LeetCode Java刷题笔记—236. 二叉树的最近公共祖先
c_cpp LCA,lca,二叉树的最低共同的ancester
LeetCode 236. 二叉树的最近公共祖先
LeetCode 236. 二叉树的最近公共祖先