剑指offer(面试题50)树中两结点的最低公共祖先(C++实现)
2018-01-01 16:32
309 查看
#include <iostream> #include <vector> using namespace std; struct TreeNode { int val; TreeNode * left; TreeNode * right; }; bool FindPath(TreeNode * root, TreeNode * pNode, vector<TreeNode *> & vec) { if (root == nullptr || pNode == nullptr) { return false; } vec.push_back(root); if (root == pNode) { return true; } if (FindPath(root->left, pNode, vec) || FindPath(root->right, pNode, vec)) { return true; } vec.pop_back(); return false; } TreeNode * FindCommonParent(TreeNode * root, TreeNode * pNode1, TreeNode * pNode2) { if (root == nullptr || pNode1 == nullptr || pNode2 == nullptr) { return nullptr; } vector<TreeNode *> vec1; bool hasPath1 = FindPath(root, pNode1, vec1); vector<TreeNode *> vec2; bool hasPath2 = FindPath(root, pNode2, vec2); if (hasPath1 && hasPath2) { int i = 0; while (vec1[i] == vec2[i]) { i++; } return vec1[i-1]; } return nullptr; }
相关文章推荐
- 剑指offer 面试题50 树中两个结点的最低公共祖先
- (剑指Offer)面试题50:树中两个结点的最低公共祖先
- 《剑指Offer》学习笔记--面试题50:树中两个结点的最低公共祖先
- 剑指offer-面试题50-树中两个结点的最低公共祖先
- 《剑指offer》面试题50 树中两个结点的最低公共祖先
- 【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】
- 剑指offer之面试题50树中两个结点的最低公共祖先
- 【剑指Offer学习】【面试题50:树中两个结点的最低公共祖先】
- 树中两结点的最低公共祖先(C++实现)
- 【剑指offer】 面试题50: 树中两个结点的最低公共祖先
- 面试题50:树中两个结点的最低公共祖先
- 《剑指offer》:[50]树中两个结点的最低公共祖先结点
- 剑指offer面试题:求树中两个结点的最低公共祖先
- 面试题50 树中两个结点的最低公共祖先
- 剑指offer——面试题50:树中两个结点的最低公共祖先
- 【剑指offer】 面试题50: 树中两个结点的最低公共祖先(二叉排序数)
- 《剑指Offer》面试题:树中两结点最低公共祖先
- 剑指offer 面试题50—树中两个节点的最低公共祖先
- 《剑指offer》树中两个结点的最低公共祖先
- 二叉树经典面试题3~树中两个结点的最低公共祖先