從 按層次輸出二叉樹 到 求解二叉樹深度 的總結

2021-06-27 16:22:40 字數 1028 閱讀 9960

最近在刷leetcode上的演算法題,發現好多題目的解題思路大體是一致的,甚至會出現一解對多題的情形,可能一方面原因是我刷的都是簡單題,另一方面原因可能是**有意來提高我們的信心和聯想能力。比如有求解二叉樹最大深度和求解二叉樹最小深度的題目,也有判斷兩顆樹是否完全一致和判斷兩個樹是否軸對稱的題目,還有按層次從樹根往下輸出每層元素和按層次從下往樹根輸出每層元素的題目等。

昨天解答了按層次從樹根往下輸出每層元素的題目,今天又碰巧遇到類似的三個題目,並不是我刻意拿這幾個題目來說話,而是我覺得演算法之間思想是相通的,並不是孤立的,從乙個演算法可以轉變為另乙個演算法,可能只需要加一些簡單的條件,所以我覺得如果我們單純地為了做題而做題,雖然也能夠提高自己的演算法水平,但是並不能舉一反三,如果我們在做一道題的時候能夠多一些聯想,多考慮一些其它可能的方式,久而久之,我們的思考能力和分析問題的能力也會得到提高。就拿我自己來說吧,之前從沒做過任何演算法題,除了在學校資料結構課上學習的一些知識。剛開始做lettcode上簡單題演算法題時,感覺很困難,一道題都要想半天甚至一天,因為之前從未有過演算法相關的訓練,思維過程也沒有那麼的靈活,但是我堅持每一道題都自己想,自己分析每一道題,不管自己演算法寫的有多爛,只要是對的即可,對於自己這樣的新手開始不必要要求那麼高。在慢慢堅持刷完二十多道簡單題後,我發現自己的思維不再那麼刻板,我會通過某一道題聯絡到另外一些相關的題。我想每道演算法題肯定會對應著某乙個問題,對應著乙個應用場景,要不就沒有人提出問題,也沒必要去解決它。我還會繼續堅持下去,從簡單題到困難題,from easy to hard,堅持刷完已有的166道題目。這個過程也許就是成長的過程吧,並不需要乙個完美的結果,只需要堅持自己,做自己想做的事,不斷提高自己,從簡單開始,從基礎開始,慢慢超越自己,提高自己。

分享這短時間在刷題中的一些體會:

(1)不要好高騖遠。從簡單做起,要不為什麼會把題目分為簡單、中等、困難呢,萬丈高樓從地起。

(2)堅持下去。每兩天我都會抽出時間做一做題,雖然上班很忙,抓住身邊的暗時間,不久你就會發現不一樣的自己。

(4)分享。將自己的思路寫下來,分享給大家,知識的共享所得回報不是簡單的知識相加,而是線性的甚至是指數級的。

希望對你有所幫助。謝謝。

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...

層次遍歷輸出二叉樹

利用層次遍歷演算法,輸出二叉樹的各個結點.說明 需事先利用括號掃瞄法建立乙個二叉鏈bt,該二叉樹bt的括號表示法對應的字串為 a b d g h c e f,i include stdio.h include stdlib.h include ctype.h define maxsize 20 ty...

樹 二叉樹 滿二叉樹 完全二叉樹 完滿二叉樹

目錄名稱作用根 樹的頂端結點 孩子當遠離根 root 的時候,直接連線到另外乙個結點的結點被稱之為孩子 child 雙親相應地,另外乙個結點稱為孩子 child 的雙親 parent 兄弟具有同乙個雙親 parent 的孩子 child 之間互稱為兄弟 sibling 祖先結點的祖先 ancesto...