求二叉樹的深度

2021-07-31 16:34:49 字數 1235 閱讀 3123

日常我們的思維以及書本上為了定義二叉樹的深度,都是從根節點出發往下數,最深的葉子所在層數代表了二叉數的深度,這個思考過程是自頂向下的。但我們使用計算機來解決這個問題時,在編碼上就會不好下手,從自頂向下的角度入手,沒有利用上二叉樹自身特有的結構性質。

我們可以逆向思維一下,利用上二叉樹的最小子結構的特點,自底向上的從葉子節點向根結點的角度來思考。

下面我們定義,二叉樹中的所有有效節點(非空節點,標註為黑色)的層數為1,葉子節點的孩子(空節點,標註為紅色)的層數為0。

如下圖,

自底向上的更新每乙個節點的層數值,顯然這是乙個後序遍歷的過程。

更新規則:節點的新層數 = 該節點未更新前的層數 + max(左孩子層數,右孩子層數)。

這麼說可能不太好理解。用幾張圖就具體很多了。我們設更新後的節點的顏色為藍色

我們後序遍歷上圖的樹

第乙個更新的節點

第二個更新的節點

第三個更新的節點

根節點更新,得到二叉樹的深度

最後在根節點返回的時候我們就能計算出二叉樹的深度了。

要指明的是,這當中對於任意乙個節點ti而言,計算時只關心有ti自身和左右孩子構成的最小子結構,而不關心整體。就這樣我們從區域性的求解逐步的向全域性的解推進,而全域性的解就是ti節點為根節點時的解。

當然了,我們其實也不用大廢周折的給樹的每乙個節點加上乙個描述它的層數的變數,只需要模擬計算過程,就可以得到答案了。

下面是**

template

int tree::depth(tree_node* node)

二叉樹(三)求二叉樹的深度

採用先序法建立一棵二叉樹,設計求該二叉樹的深度,二叉樹的資料域型別為字元型,擴充套件二叉樹的葉子結點用 表示,要求可以求多棵二叉樹的深度,當二叉樹的深度為0時程式結束。輸入描述 迴圈輸入多棵擴充套件二叉樹的先序遍歷序列,每棵樹佔一行,以回車結束,每棵二叉樹中結點之間以空格隔開輸出描述 輸出各二叉樹的...

求二叉樹的深度

題目 輸入一棵二叉樹的根節點,求該樹的深度。從根節點到葉子結點一次經過的結點形成樹的一條路徑,最長路徑的長度為樹的深度。根節點的深度為1。解體思路 如果根節點為空,則深度為0,返回0,遞迴的出口 如果根節點不為空,那麼深度至少為1,然後我們求他們左右子樹的深度,比較左右子樹深度值,返回較大的那乙個 ...

求二叉樹的深度

已知一顆二叉樹的中序遍歷序列和後序遍歷序列,求二叉樹的深度。輸入資料有多組,輸入t 代表有t 組資料。每組資料報括兩個長度小於50 的字串,第乙個字串表示二叉樹的中序遍歷,第二個表示二叉樹的後序遍歷。輸出二叉樹的深度。2 dbgeafc dgebfca lnixu linux 4 3 include...