zoukankan      html  css  js  c++  java
  • NC102 在二叉树中找到两个节点的最近公共祖先

    package NC;

    /**
    * NC102 在二叉树中找到两个节点的最近公共祖先
    *
    * 给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点。
    *
    * 要求:空间复杂度O(1) ,时间复杂度O(n)
    *
    * @author Tang
    * @date 2021/9/29
    */
    public class LowestCommonAncestor {

    int o1;

    int o2;

    int result = 0;

    public int lowestCommonAncestor (TreeNode root, int o1, int o2) {
    // write code here
    this.o1 = o1;
    this.o2 = o2;
    preSearch(root);
    return result;
    }

    /**
    * 前序遍历
    * 根左右
    * 判断其左右节点是否包含,如果有则根节点为最近祖先,
    *
    *
    *
    * @param node
    * @return 当前节点的左子树包含几个元素
    */
    private int preSearch(TreeNode node){
    if(node == null) {
    return 0;
    }

    int left = preSearch(node.left);
    int right = preSearch(node.right);

    if(left == 2) {
    result = node.left.val;
    return -1;
    }

    if(right == 2) {
    result = node.right.val;
    return -1;
    }

    //如果包含元素
    if(left + right == 2) {
    result = node.val;
    return -1;
    }

    if(node.val == o1 || node.val == o2) {
    return left + right +1;
    }

    return left + right;
    }


    public static void main(String[] args) {



    }

    }
  • 相关阅读:
    面试常考知识点——Java(JVM,JDK,JRE)
    使用CSS transform属性的skewX、skewY沿X、Y轴倾斜元素
    视觉设计应用
    小程序
    小程序获取用户的登录头像和用户名
    整站建设
    2018-05-05(在小程序中使用图标)
    2018-05-03(PHP)
    webpack
    简历
  • 原文地址:https://www.cnblogs.com/ttaall/p/15352446.html
Copyright © 2011-2022 走看看