zoukankan      html  css  js  c++  java
  • 235. Lowest Common Ancestor of a Binary Search Tree 235.二叉搜索树的最低共同祖先

    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 p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”

    Given binary search tree:  root = [6,2,8,0,4,7,9,null,null,3,5]

     

    Example 1:

    Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 8
    Output: 6
    Explanation: The LCA of nodes 2 and 8 is 6.
    

    Example 2:

    Input: root = [6,2,8,0,4,7,9,null,null,3,5], p = 2, q = 4
    Output: 2
    Explanation: The LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

    首先,退出情况起码可以写写。

    边界情况。这题比较特殊,要考虑到左边、右边一边就是根节点的情况

    
    

    从左右的角度思考。也没法思考吧
    root.left = 这样没辙。其实就是这么写的,不用怀疑!这一步叫做divide
    conquer指的是征服(需要进一步完成具体实现),好吧。其实好像都是这样写的!好吧,更加理解DC了!

    因为要用到左右节点,所以要把左右节点都放到DC的参数中。

    然后一个基本原理就是:左右节点非空的时候,就是两者的共同父节点

     彻底忘了有DC这回事了,尼玛这才过了几天

    /**
     * Definition for a binary tree node.
     * public class TreeNode {
     *     int val;
     *     TreeNode left;
     *     TreeNode right;
     *     TreeNode(int x) { val = x; }
     * }
     */
    class Solution {
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            //边界情况。这题比较特殊,要考虑到左边、右边一边就是根节点的情况
            if ((root == null) || (p == root) || (q == root))
                return root;
            
            //分隔 divide
            TreeNode left = lowestCommonAncestor(root.left, p, q);
            TreeNode right = lowestCommonAncestor(root.right, p, q);
            
            //实现 conquer
            //都不空,左右一个为空,都空
            if ((left != null) && (right != null)) {
                return root;
            }else if (left != null) {
                return left;
            }else if (right != null) {
                return right;
            }else {
                return null;
            }
            
            //return root;
        }
    }
    View Code


  • 相关阅读:
    QML用Qt.labs.settings实现保存用户设置
    周练1
    Django的Hello World
    python 笔记
    Qt Creator 搭配Git 版本控制
    Windows系统下在Git Bash中把文件内容复制到剪贴板的命令
    【转】Qt之JSON保存与读取
    Qt Creator 中文编译失败 怎么办
    Treap树 笔记
    【POJ1037】A decorative fence(DP)
  • 原文地址:https://www.cnblogs.com/immiao0319/p/12961197.html
Copyright © 2011-2022 走看看