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

    /**
     * 236. Lowest Common Ancestor of a Binary Tree
     * 1. Time:O(n)  Space:O(h)
     * 2. Time:O(n)  Space:O(n)
     */
    
    // 1. Time:O(n)  Space:O(h)
    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if(root==null || root==p || root==q) return root;
            TreeNode left = lowestCommonAncestor(root.left,p,q);
            TreeNode right = lowestCommonAncestor(root.right,p,q);
            if(left!=null && right!=null) return root;
            else return left==null? right:left;
        }
    }
    
    // 2. Time:O(n)  Space:O(n)
    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            Stack<TreeNode> stack = new Stack<>();
            HashMap<TreeNode,TreeNode> map = new HashMap<>();
            stack.push(root);
            map.put(root,null);
            while(!map.containsKey(p) || !map.containsKey(q)){
                TreeNode cur = stack.pop();
                if(cur.left!=null){
                    stack.push(cur.left);
                    map.put(cur.left,cur);
                }
                if(cur.right!=null){
                    stack.push(cur.right);
                    map.put(cur.right,cur);
                }
            }
            HashSet<TreeNode> set = new HashSet<>();
            while(p!=null){
                set.add(p);
                p = map.get(p);
            }
            while(q!=null){
                if(set.contains(q))
                    break;
                q = map.get(q);
            }
            return q;
        }
    }
    
  • 相关阅读:
    MySQL灾备切换
    crontab 定时任务
    Mysql常用命令 详细整理版
    linux 常用命令
    shell逻辑运算总结, 包括[[]]与[]的区别,&&与-a的区别,||与-o的区别
    linux端口详解大全
    编译安装php5.6
    linux给用户添加sudo权限
    Effective C#(二)
    Effective C#(一)
  • 原文地址:https://www.cnblogs.com/AAAmsl/p/12855343.html
Copyright © 2011-2022 走看看