美文网首页
leetcode_树递归

leetcode_树递归

作者: 广进_24c5 | 来源:发表于2020-05-09 09:39 被阅读0次

未完待续。。。

1.leetcode 671

1.1题目描述

leetcode_671

1.2代码

  • 利用根节点是最小值的这个特点
    /*
        注意:
            1)最小值一定是根节点
            2)求出左右子树中的最小值就是第二小的值,
                且这个值不能等于 root.val(最小值),并且注意样例 [2,2,2]
            3)添加 flag 标志位,确保 min 被修改(存在比最小值小的数)已知。

     */
    public int findSecondMinimumValue(TreeNode root) {

        int min = Integer.MAX_VALUE;
        int flag = 0;

        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()){
            TreeNode pop = stack.pop();

            if(pop.val != root.val){
                if(pop.val<=min){
                    min = pop.val;
                    flag = 1;
                }
            }

            if(pop.right!=null) stack.push(pop.right);
            if(pop.left!=null) stack.push(pop.left);
        }
        if(min == root.val || flag==0) return -1;
        return min;
    }
  • 直接使用两个变量保存最小值和第二小值
public int findSecondMinimumValue2(TreeNode root) {
        int first = Integer.MAX_VALUE;
        int second = Integer.MAX_VALUE;
        //count 值被修改过了,表示存在第二小的值
        int count = 0;

        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode pop = stack.pop();

            if(pop.val<first){
                second = first;
                first = root.val;
            }
            //注意: pop.val 要 = second 否则样例: [2,2,2147483647] 过不了
            else if(pop.val>first && pop.val<=second){
                second = pop.val;
                count++;
            }

            if (pop.right != null) stack.push(pop.right);
            if (pop.left != null) stack.push(pop.left);
        }
        return count==0?-1:second;
}

相关文章

  • leetcode_树递归

    未完待续。。。 1.leetcode 671 1.1题目描述 1.2代码 利用根节点是最小值的这个特点 直接使用两...

  • 3 递归(19)(方法层面的高级循环)

    递归 树的递归 其它递归

  • 树的遍历算法

    树的递归遍历 树的层次遍历 树的非递归前序遍历 树的非递归中序遍历

  • 二叉树的前序、中序、后序遍历(递归、非递归)

    二叉树 前序 递归: 非递归: 中序 递归: 非递归: 层序 递归: 非递归:

  • 数据结构之二叉树

    数据结构之二叉树 递归构造二叉树 二叉树节点: 递归构造: 图示: 递归遍历 递归实现先序遍历 图示: 递归实现中...

  • 二叉树算法之0-计算二叉树的深度

    算法思想:使用递归 算法解析:分别递归左树和右树,递归到叶子节点时返回0,递归回溯时值+1,不断累积回溯的深度,每...

  • 算法之二叉树

    二叉树之C++实现 创建二叉树 复制二叉树 先序遍历 递归实现 非递归实现 中序遍历 递归实现 非递归实现 后序遍...

  • 二叉树及leetcode练习题

    二叉树 二叉树天然的递归结构 二叉树本身就是一个递归的定义。先来看一下递归的前序遍历: 递归的定义:递归终止条件 ...

  • 递归树

    一:递归树与时间复杂度分析 1,递归思想就是将大问题分解为小问题来求解,然后在将小问题分解为小小问题,将问题一层一...

  • php无限极分类

    递归--无限极分类 递归--子孙树转二维数组 可以配合Nestable使用 递归--获取树所有叶子节点 结果1 结...

网友评论

      本文标题:leetcode_树递归

      本文链接:https://www.haomeiwen.com/subject/zzshnhtx.html