题解 | #在二叉树中找到两个节点的最近公共祖先#
在二叉树中找到两个节点的最近公共祖先
https://www.nowcoder.com/practice/e0cc33a83afe4530bcec46eba3325116
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} * }; */ #include <vector> class Solution { public: void getPath(std::vector<TreeNode*>& path, TreeNode* root, int target) { // 深度优先搜索 if (root == nullptr) { return; } path.push_back(root); if (path.back()->val != target) { getPath(path, root->left, target); getPath(path, root->right, target); } if (path.back()->val != target){ path.pop_back(); } } /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param o1 int整型 * @param o2 int整型 * @return int整型 */ int lowestCommonAncestor(TreeNode* root, int o1, int o2) { // write code here std::vector<TreeNode*> path1, path2; getPath(path1, root, o1); getPath(path2, root, o2); int ret; for (int i = 0; i < path1.size() && i< path2.size(); i++) { if (path1[i]->val == path2[i]->val) { ret = path1[i]->val; } else { break; } } return ret; } };
在线编程练习 文章被收录于专栏
C++在线编程练习题解