求解二叉樹寬度的遞迴與非遞迴演算法

2021-10-09 10:36:23 字數 747 閱讀 2531

方法1:關於遞迴演算法的實現,遞迴演算法的實現包含兩個函式,在這個函式中需要借助陣列來實現實現的具體方式,是在迴圈遍歷的過程中,將每一層中的節點數都儲存到相應的陣列空間中。在對二叉樹進行遍歷結束後,在對陣列進行處理,便可以獲得,相應的二叉樹的寬度。

//將二叉樹中每層的結點數記錄在乙個陣列中,a[i]的值表示第i層的結點數

void eachlayernodes(bitree t, int a, int i)

}int getwidth(bitree t)

eachlayernodes(t, a, 1);//記錄每層結點數

int max = 0;

for (int j = 1; j <= height; j++)//求出最多結點數

return max;

}

方法2:關於非遞迴的演算法,就是利用佇列的原理,每一次迴圈結束後,在佇列中的永遠是同一層的節點,不存在不是同一層的節點出現在佇列中。此時,通過獲得佇列的長度,便可以得到二叉樹的寬度。

//本方法和普通層序遍歷只在於多了個內層迴圈,保證了每次外層迴圈都可讓第i層結點一次性出隊,第i+1層結點一次性入佇列。主要就是考了 1 2 3句

int bitreewidth2(bitree t)

if(cursize>max) max=cursize;

}return max;

}

二叉樹深度求解(遞迴,非遞迴)

遞迴實現基本思想 為了求得樹的深度,可以先求左右子樹的深度,取二者較大者加1即是樹的深度,遞迴返回的條件是若節點為空,返回0 演算法 1 intfindtreedeep bintree bt 8return deep 9 非遞迴實現基本思想 受後續遍歷二叉樹思想的啟發,想到可以利用後續遍歷的方法來求...

求解二叉樹的高度(遞迴 非遞迴)

遞迴方式 遞迴方式的求解過程很簡單,只需要將問題分解。首先,遞迴出口是什麼?毫無疑問,當樹節點為空時,我們就可以結束遞迴了。那麼當前樹的高度和其左子樹及右子樹的關係是什麼呢?樹的高度,定義為從根節點到葉子節點的最長路徑 因此當前樹深應該是自身節點所佔的一層高度加上左右子樹中深的高度。因此,有一下遞迴...

二叉樹的遞迴與非遞迴

include include include include using namespace std templatestruct binarytreenode template class binarytree binarytree t a,size t n,const t invalid bi...