zoukankan      html  css  js  c++  java
  • 235. 二叉搜索树的最近公共祖先(c++)

    给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。
    百度百科中最近公共祖先的定义为:“对于有根树 T 的两个结点 p、q,最近公共祖先表示为一个结点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
     
     
     
    示例 1:
    输入: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8     输出: 6
    解释: 节点 2 和节点 8 的最近公共祖先是 6。

    说明:   所有节点的值都是唯一的。

    递归思路

    p、q 为不同节点且均存在于给定的二叉搜索树中。

    class Solution {
    public:
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            // 根据值大小 判断左右子树,进行递归
            int num1 = p -> val;
            int num2 = q -> val;
            int mid = root -> val;
           
            if (num1 < mid && num2 < mid) {
                return lowestCommonAncestor(root -> left, p, q);
            }
            if (num1 > mid && num2 > mid) {
                return lowestCommonAncestor(root -> right, p, q);
            }

            return root;  // 若不是上面两个判断,则表明两个值分跨在根值左右或有一值为根,则根就是最近
        }
    };

     
  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/one-think/p/12492694.html
Copyright © 2011-2022 走看看