• [leetCode]剑指 Offer 68


    在这里插入图片描述

    思路

    从根节点开始遍历:

    • 如果当前节点大于p,q 那么p,q的最近公共节点在当前节点的左子树
    • 如果当前节点小于p,q 那么p,q的最近公共节点在当前节点的右子树
    • 如果当前节点的值不满足上述两条要求,那么说明当前节点就是「分岔点」。此时,pp 和 qq 要么在当前节点的不同的子树中,要么其中一个就是当前节点。

    递归

    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            if (root.val > p.val && root.val > q.val) 
                return lowestCommonAncestor(root.left, p, q);
            if (root.val < p.val && root.val < q.val) 
                return lowestCommonAncestor(root.right, p, q);
            return root;
        }
    }
    

    循环

    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            TreeNode ancestor = root;
            while (true) {
                if (ancestor.val > p.val && ancestor.val > q.val)
                    ancestor = ancestor.left;
                else if (ancestor.val < p.val && ancestor.val < q.val)
                    ancestor = ancestor.right;
                else 
                    break;
            }
            return ancestor;
        }
    }
    
  • 相关阅读:
    vue 父子组件传参
    vue中引入swiper(vue中的滑块组件vue-awesome-swiper)
    border-radius值的解析
    chrome开发工具指南(十四)
    chrome开发工具指南(十三)
    Python动态强类型解释型语言
    go基础 01
    代码发布 04
    代码发布03
    代码发布02
  • 原文地址:https://www.cnblogs.com/PythonFCG/p/13859921.html
Copyright © 2020-2023  润新知