问题

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4100 访问。

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

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

输入: 

2
   / \
  2   5
       / \
     5   7

输出: 5

说明: 最小的值是 2 ,第二小的值是 5 。

输入:

2
    / \
  2   2

输出: -1

说明: 最小的值是 2, 但是不存在第二小的值。


Given a non-empty special binary tree consisting of nodes with the non-negative value, where each node in this tree has exactly two or zero sub-node. If the node has two sub-nodes, then this node's value is the smaller value among its two sub-nodes.

Given such a binary tree, you need to output the second minimum value in the set made of all the nodes' value in the whole tree.

If no such second minimum value exists, output -1 instead.

Input: 

2
   / \
  2   5
       / \
     5   7

Output: 5

Explanation: The smallest value is 2, the second smallest value is 5.

Input: 

2
    / \
  2   2

Output: -1

Explanation: The smallest value is 2, but there isn't any second smallest value.


示例

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4100 访问。

public class Program {public static void Main(string[] args) {var root = new TreeNode(1) {left = new TreeNode(3) {left = new TreeNode(5),right = new TreeNode(7)},right = new TreeNode(9)};var res = FindSecondMinimumValue(root);Console.WriteLine(res);Console.ReadKey();}public static int FindSecondMinimumValue(TreeNode root) {var first = int.MaxValue;var second = int.MaxValue;PreOrder(root, ref first, ref second);return second != int.MaxValue ? second : -1;}public static void PreOrder(TreeNode root, ref int first, ref int second) {//前序遍历if(root == null) return;if(root.val < first) {//如果当前值更比 first 还小//那么第 2 小变成当前最小//当前最小变成当前值second = first;first = root.val;} else if(root.val > first && root.val < second)//如果界面 2 者之间//将第 2 小变成当前值即可second = root.val;PreOrder(root.left, ref first, ref second);PreOrder(root.right, ref first, ref second);}public class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int x) { val = x; }}}

以上给出1种算法实现,以下是这个案例的输出结果:

该文章的最新版本已迁移至个人博客【比特飞】,单击链接 https://www.byteflying.com/archives/4100 访问。

3

分析:

显而易见,以上算法的时间复杂度为:  。

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

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

    文章目录 1. 题目信息 2. 解题 2.1 递归查找 2.2 改循环 1. 题目信息 给定一个非空特殊的二叉树,每个节点都是正数,并且每个节点的子节点数量只能为 2 或 0.如果一个节点有两个子节点 ...

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

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

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

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

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

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

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

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

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

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

  7. leetcode刷题:删除链表中的节点

    题目: 分析: 删除链表中的节点的常见的方法是定位到待删除节点的上一个节点,修改上一个节点的 \textit{next}next 指针,使其指向待删除节点的下一个节点,即可完成删除操作. 这道题中,传 ...

  8. C#LeetCode刷题之#720-词典中最长的单词(Longest Word in Dictionary)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/4120 访问. 给出一个字符串数组words组成的一本英语词典.从 ...

  9. C#LeetCode刷题之#840-矩阵中的幻方(Magic Squares In Grid)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3752 访问. 3 x 3 的幻方是一个填充有从 1 到 9 的不 ...

最新文章

  1. Windows无法更新的解决办法
  2. 打开闪光灯_用手机拍照这么久,你居然还不知道闪光灯怎么用
  3. js中的showModalDialog的实战应用
  4. storm-kafka源码分析
  5. jvm系列(九):如何优化Java GC
  6. 面试中的常见14种算法套路
  7. LeetCode 1629. 按键持续时间最长的键
  8. AcWing 95. 费解的开关(指数型枚举)
  9. 《机器视觉算法与应用》第3章 机器视觉算法之形态学——学习笔记
  10. 测试计划和测试方案的本质区别
  11. html画布画五环,奥运五环(canvas标签学习)
  12. 抛物线模拟合地对空导弹轨迹[python][抛物线][地对空导弹轨迹]
  13. Ubuntu 10.10学习笔记
  14. 《用户体验要素》笔记
  15. oracle SO币种默认设置,Oracle EBS 11i 表结构——OE模块 so_headers_all;so_lines_all
  16. 编程计算长方形的面积和周长(python)_c语言计算长方形的面积和周长
  17. Elasticsearch:理解 Master,Elections,Quorum 及 脑裂
  18. android 股票 开发,Android版的股票行情K线图开发
  19. 我只是穴居人-克拉克/惠勒定律的汉塞尔曼推论
  20. 哀嚎遍野!学妹跟学弟分手了,因为JavaEE期末课设SSM太难了!呜呼哀哉!

热门文章

  1. mysql 字符,索引
  2. Oracle删除用户与删除表
  3. C++——复制构造函数的形参为什么要是const引用
  4. 【今日CV 计算机视觉论文速览 第136期】Wed, 26 Jun 2019
  5. HTML5 css链接添加不同的样式
  6. 【Linux学习】linux源代码版本控制RCS
  7. 【C++基础学习】const限定修饰符详解
  8. django-模态框编辑学生
  9. PHP处理图片导致内存溢出
  10. nginx 修改 max open files limits