欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Leetcode 671. 二叉树中第二小的节点 C++

程序员文章站 2024-02-18 09:06:34
...

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

题目

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

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

测试样例

示例 1:

输入: 
    2
   / \
  2   5
     / \
    5   7

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

示例 2:

输入: 
    2
   / \
  2   2

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

题解

dfs遍历树,用两个变量记录前二小的节点值。由题意可知,最小的节点值一定是根节点的值,因此我们只需要考虑第二小值。详细过程见代码

代码

	int first = INT_MAX;
    int second = INT_MAX;
    bool find = false;
    void search(TreeNode* root){
        if(root == NULL)    return;
        if(root->val > first && second>=root->val){
            second = root->val;
            find = true;
        }
        search(root->left);
        search(root->right);   
    }
    int findSecondMinimumValue(TreeNode* root) {
        if(root == NULL)    return -1;
        first = root->val;
        search(root);
        if(!find)   return -1;
        return second;
    }

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