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) {



    }

    }
  • 相关阅读:
    451. Sort Characters By Frequency
    424. Longest Repeating Character Replacement
    68. Text Justification
    44. Wildcard Matching
    160. Intersection of Two Linked Lists
    24. Swap Nodes in Pairs
    93. 递归实现组合型枚举
    98. 分形之城
    97. 约数之和
    96. 奇怪的汉诺塔
  • 原文地址:https://www.cnblogs.com/ttaall/p/15352446.html
Copyright © 2011-2022 走看看