Second Minimum Node In a Binary Tre

題目:二叉樹中第二小的節(jié)點

解決方法

方法一

思路

用深度優(yōu)先搜索遍歷此二叉樹,同時利用Set結構(具有唯一性)記錄樹中每個不一樣的值。然后從set中找到第二小的值。
最小的節(jié)點一定是二叉樹的根節(jié)點。

代碼示例

class Solution {
    public void dfs(TreeNode root, Set<Integer> uniques) {
        if (root != null) {
            uniques.add(root.val);
            dfs(root.left, uniques);
            dfs(root.right, uniques);
        }
    }

    public int findSecondMinimumValue(TreeNode root) {
        Set<Integer> uniques = new HashSet<Integer>();
        dfs(root, uniques);//二叉樹前序遍歷所有結點并添加到hashset集合中,去重

        int min = root.val;//根據題目的限定條件,根節(jié)點是整個二叉樹的最小值
        long ans = Long.MAX_VALUE;
        for (int v : uniques) {
            if (min < v && v < ans) {//遍歷集合,找到第二小的值
                ans = v;
            }
        }
        //return ans == Long.MAX_VALUE ? -1 : (int) ans;
        return ans < Long.MAX_VALUE ? (int) ans : -1;//如果ans小于Long.MAX_VALUE說明找到了第二小的值
    }
}

復雜度分析

N是給定的樹中的所有結點的數量
時間復雜度:O(N)。
空間復雜度:O(N)。

方法二

思路

基于方法一的優(yōu)化。
讓min = root.val,當遍歷樹的節(jié)點時,如果node.val > min,結合題意我們可以推測出,在子樹中的所有值都是大于等于node.val ,這個值就是我們想要的答案,所以我們沒有必要在搜索子樹。

我們只關心第二小的值,我們不需要記錄任何比當前候選值大的值,所以我們可以不需要像方法一那樣,通過set結構保存所有的值。

代碼示例

復雜度分析

時間復雜度:O(N),我們需要訪問每個節(jié)點最多一次。
空間復雜度:O(N)。

?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 題量有點多,建議Ctrl + F題號或題目哦~ 二叉樹的遍歷(前序遍歷,中序遍歷,后序遍歷)[144] Binar...
    野狗子嗷嗷嗷閱讀 9,347評論 2 37
  • 樹的概述 樹是一種非常常用的數據結構,樹與前面介紹的線性表,棧,隊列等線性結構不同,樹是一種非線性結構 1.樹的定...
    Jack921閱讀 4,762評論 1 31
  • 1 序 2016年6月25日夜,帝都,天下著大雨,拖著行李箱和同學在校門口照了最后一張合照,搬離寢室打車去了提前租...
    RichardJieChen閱讀 5,376評論 0 12
  • 是誰,陪你撐著傘, 走過泥濘潮濕的橋和路? 又是誰,走在你身旁, 和你一起在雨天里放煙火? 是誰,出現在雨天, 溫...
    琮鈺閱讀 557評論 0 0
  • 前言 我和他相遇在一個并不悶熱的夏天,直至此刻,四年后的今天,我依舊可以清晰的描摹出他的輪廓。顧朗,你還好嗎? ...
    糊鍋閱讀 254評論 0 0

友情鏈接更多精彩內容