• leetcode 671. 二叉树中第二小的节点


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

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

    示例 1:

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

    示例 2:

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

    解题思路:
    •   遍历所有结点,把所有结点的值保存在一个数组中
    • 把数组中重复值去掉
    • 找出去重数组中的第二小值
    • 去重后的数组可能不存在第二小值,要分别讨论
     1 /**
     2  * Definition for a binary tree node.
     3  * struct TreeNode {
     4  *     int val;
     5  *     TreeNode *left;
     6  *     TreeNode *right;
     7  *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     8  * };
     9  */
    10 #include<algorithm>
    11 #include<queue>
    12 class Solution {
    13 public:
    14     int findSecondMinimumValue(TreeNode* root) {
    15         queue<TreeNode*> v;
    16         vector<int> ans;
    17         v.push(root);
    18         while(!v.empty()){
    19             TreeNode* temp = v.front();
    20             ans.push_back(temp->val);
    21             v.pop();
    22             if(temp->left != NULL) v.push(temp->left);
    23             if(temp->right != NULL) v.push(temp->right);
    24         }
    25         sort(ans.begin(), ans.end());
    26         ans.erase(unique(ans.begin(), ans.end()), ans.end());
    27         if(ans.size()>1) return ans[1];
    28         else return -1;
    29     }
    30 };
    有疑惑或者更好的解决方法的朋友,可以联系我,大家一起探讨。qq:1546431565
  • 相关阅读:
    反应堆模式
    ABP领域层——仓储(Repositories)
    如何使用ASP.NET Web API OData在Oracle中使用Entity Framework 6.x Code-First方式开发 OData V4 Service
    dapper的Dapper-Extensions用法(一)
    VisualStudio 怎么使用Visual Leak Detector
    Visual Studio Code开发TypeScript
    Topshelf创建Windows服务
    ENode框架初始化
    知已者明(转)
    配置静态监听解决ORA-12514错误的案例(转)
  • 原文地址:https://www.cnblogs.com/mr-stn/p/8951235.html
Copyright © 2020-2023  润新知