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;
            }
        }
    };
    
  • 相关阅读:
    Android 读写文件
    Android junit单元测试
    pilot
    关闭端口8080/1099
    [table-ext.js]用于ajax请求后绑定返回json对象到table
    对一段汇编代码优化思路
    Hello
    第1章Java语言概述 以后我会陆续更新从零基础学习的
    MyEclipse快捷键大全(绝对全)
    2018总结,2019计划
  • 原文地址:https://www.cnblogs.com/lailailai/p/4639230.html
Copyright © 2011-2022 走看看