zoukankan      html  css  js  c++  java
  • LeetCode Lowest Common Ancestor of a Binary Search Tree

    Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
    According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allow a node to be a descendant of itself).”

            _______6______
           /              
        ___2__          ___8__
       /              /      
       0      _4       7       9
             /  
             3   5
    

    For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

    求公共前缀路径即可

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            vector<TreeNode*> patha;
            vector<TreeNode*> pathb;
            dfs(root, patha, p);
            dfs(root, pathb, q);
            int alen = patha.size();
            int blen = pathb.size();
            TreeNode* comm = NULL;
            int i = 0;
            while (i < alen && i < blen && patha[i] == pathb[i]) {
                comm = patha[i++];
            }
            return comm;
        }
        
        void dfs(TreeNode* root, vector<TreeNode*>& path, TreeNode* target) {
            if (root == NULL || target == NULL) {
                return;
            }
            path.push_back(root);
            if (target->val < root->val) {
                dfs(root->left, path, target);
            } else if (target->val > root->val) {
                dfs(root->right, path, target);
            } else {
                return;
            }
        }
    };
    
  • 相关阅读:
    WEB引入Google思源黑体
    Linux安装最新版Node.js
    JS判断值是否是数字
    高效jQuery的奥秘
    一个Web前端工程师或程序员的发展方向,未来困境及穷途末路
    javascript 模块化 (切记:学习思想)
    学习 正则表达式 js java c# python 通用
    Promise如何解决回调地狱
    VSCode 开发插件 推荐
    js移动端自适应动态设置html的fontsize
  • 原文地址:https://www.cnblogs.com/lailailai/p/4639230.html
Copyright © 2011-2022 走看看