文章目录

  • 1. 题目信息
  • 2. 解题
    • 2.1 递归查找
    • 2.2 改循环

1. 题目信息

给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0。如果一个节点有两个子节点的话,那么这个节点的值不大于它的子节点的值。

给出这样的一个二叉树,你需要输出所有节点中的第二小的值。如果第二小的值不存在的话,输出 -1 。

示例 1:输入: 2/ \2   5/ \5   7输出: 5
说明: 最小的值是 2 ,第二小的值是 5 。
示例 2:输入: 2/ \2   2输出: -1
说明: 最小的值是 2, 但是不存在第二小的值。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/second-minimum-node-in-a-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

  • 根节点是最小的,依次查找每个节点是否比最小的大
  • 并更新找到的第二小的数组

2.1 递归查找

class Solution {public:int findSecondMinimumValue(TreeNode* root) {if(!root)return -1;int minNum = root->val;long secMinNum = LONG_MAX;findSec(root,minNum,secMinNum);if(secMinNum != LONG_MAX)return secMinNum;return -1;}void findSec(TreeNode* root, int &minNum, long &secMinNum){if(!root)return;if(root->val > minNum && root->val < secMinNum){secMinNum = root->val;}findSec(root->left,minNum,secMinNum);findSec(root->right,minNum,secMinNum);}
};

2.2 改循环

前序循环

class Solution {public:int findSecondMinimumValue(TreeNode* root) {if(!root)return -1;int minNum = root->val;long secMinNum = LONG_MAX;stack<TreeNode*> stk;while(root || !stk.empty()){while(root){stk.push(root);if(root->val > minNum && root->val < secMinNum)secMinNum = root->val;root = root->left;}root = stk.top()->right;stk.pop();}if(secMinNum != LONG_MAX)return secMinNum;return -1;}
};

LeetCode 671. 二叉树中第二小的节点相关推荐

  1. 671. 二叉树中第二小的节点

    给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,root.val = mi ...

  2. leetcode刷题之 树(14)-递归:找出二叉树中第二小的节点

    [LeetCode] Second Minimum Node In a Binary Tree 二叉树中第二小的结点 Given a non-empty special binary tree con ...

  3. LeetCode简单题之二叉树中第二小的节点

    题目 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,即 root.val ...

  4. 二叉树中第二小的节点

    给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点的话,那么该节点的值等于两个子节点中较小的一个. 更正式地说,root.val = mi ...

  5. C#LeetCode刷题之#671-二叉树中第二小的节点(Second Minimum Node In a Binary Tree)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4100 访问. 给定一个非空特殊的二叉树,每个节点都是正数,并且每 ...

  6. [LeetCode]124. 二叉树中的最大路径和(java实现)递归

    [LeetCode]124. 二叉树中的最大路径和(java实现)递归 1. 题目 2. 读题(需要重点注意的东西) 3. 解法 4. 可能有帮助的前置习题 5. 所用到的数据结构与算法思想 6. 总 ...

  7. 二叉树中如何求根节点到任意节点的路径?

    二叉树中如何求任一节点的路径呢? 思路 使用先序遍历,处理的时候让节点入栈,并且加上标志位即可. 使用另外的result保存最终的路径. 函数 void pre_order(TreeNode * no ...

  8. 牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案

    牛客题霸 [ 在二叉树中找到两个节点的最近公共祖先] C++题解/答案 题目描述 给定一棵二叉树以及这棵树上的两个节点 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 题解: 我们想想最 ...

  9. 在二叉树中找到两个节点的最近公共祖先(C++)

    在二叉树中找到两个节点的最近公共祖先 描述   给定一棵二叉树(保证非空)以及这棵树上的两个节点对应的val值 o1 和 o2,请找到 o1 和 o2 的最近公共祖先节点. 数据范围:树上节点数满足1 ...

最新文章

  1. Silverlight开发中遇到的几个小问题
  2. ICML2020 | PGFS:如何保证生成分子是可合成的?强化学习来帮忙
  3. 《LeetCode力扣练习》第2题 C语言版 (做出来就行,别问我效率。。。。)
  4. Java四种输出语句
  5. [html] 实现一个页面锁屏的功能
  6. arcgis 经纬度转大地坐标_【干货】坐标系统与投影变换及在ArcGIS中的应用
  7. 进入路由器boot的方式
  8. trados 2007 2009 共用一个LICENSE服务器
  9. Linux中级之ansible概念及hoc命令行调用模式
  10. linux gnu编译器下载,GNU Compiler Collection(gcc编译器)下载_GNU Compiler Collection(gcc编译器)官方下载-太平洋下载中心...
  11. IPOP-CMA-ES:一种重启CMA-ES
  12. linux svn e210003,svnadmin load 遇到E125005 的错误
  13. python编解码的字节与字符串相互转换
  14. 看黄天鹅如何下一颗高端鸡蛋?
  15. Oracle 12C Sharding分片数据库
  16. 小白也能看懂的零知识证明与zk-SNARKs
  17. android adb 电池电量,adb 查看电池状态信息。详解
  18. java实现数组的奇偶数互换
  19. python开发的项目管理软件_10 个超好用的免费开源项目管理软件
  20. idea右侧maven依赖飘红解决办法

热门文章

  1. Linux进程全解2——进程环境(环境变量、进程运行的虚拟地址空间)
  2. menuconfig和Kconfig、.config的关系
  3. CCCC L1-002. 打印沙漏【图形打印】
  4. LeetCode | HouseCode 算法题
  5. 初学Struts遇到的坑爹问题
  6. 织梦(DEDECMS)首页调用相关投票的方法(自动更新)
  7. exe程序的启动过程
  8. Android Adb 源码分析
  9. 在8080端口输出php的输出,端口8080上的PHP错误
  10. ViceDinoSpecCtrlDlg.cpp