题解 | #二叉搜索树的最近公共祖先#

二叉搜索树的最近公共祖先

https://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 *	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 * };
 */
#include <vector>
using std::vector;
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param root TreeNode类 
     * @param p int整型 
     * @param q int整型 
     * @return int整型
     */

    vector<int> get_path(TreeNode* root, int target){
        vector<int> path;
        TreeNode* node = root;
        while (node->val != target) {
            path.push_back(node->val);
            if (node->val > target) {
                node = node->left;
            }
            else if (node->val < target) {
                node = node->right;
            }
        }
        path.push_back(node->val);
        return path;
    }


    int lowestCommonAncestor(TreeNode* root, int p, int q) {
        // write code here
        vector<int> pathp = get_path(root, p);
        vector<int> pathq = get_path(root, q);
        int i = 0;
        int j = 0;
        int ans;
        while (i != pathp.size() && j != pathq.size()) {
            if (pathp[i] == pathq[j]) {
                ans = pathp[i];
            }
            i++;
            j++;
        }
        return ans;
    }
};

题目要求:找出二叉搜索树当中,两个节点的最近共同祖先。

节点存储结构:二叉搜索树,特点,节点值>左子节点,节点值<右子节点。

解法:

1.存储从根节点到目标节点的路径,每个路径点用节点值表示

2.求得两个节点的路径

3.循环对比两个路径,最后一次相等的路径点,即为最近公共祖先,返回该路径点数值

#刷题#
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务