用遞迴來求二叉樹的高度 寬度

2021-09-27 08:16:23 字數 999 閱讀 3243

1、遞迴來求二叉樹的高度

可以先寫出遞迴表示式:

二叉樹高度height = math.max(height[left],height[right])+1;

即左右子樹高度的最大值加1,即為樹的高度,以此不斷遞迴,最後求出樹的高度。

其實也用到了dfs的思想

public static int treedepth(treenode root) 

int left = treedepth(root.left);

int right = treedepth(root.right);

return math.max(left, right)+1;

}

**量很少,主要是遞迴表示式,這裡可以將左子樹、右子樹當成乙個整體,用遞迴來求其高度即可。

2、遞迴來求二叉樹的寬度

**二叉樹的寬度定義:**具有最多節點數的層中包含的節點數

暫時沒有看到其他更好的方法,這裡需要設定兩個全域性變數,整型max,和陣列count[100],陣列長度設為足夠大,max用來更新寬度,陣列用來記錄每層的結點數

public static int max = 0;

public static int count = new int[100];

//遞迴方法求二叉樹寬度

public static void treewidth(treenode root, int k)

count[k]++;

max = math.max(count[k], max);

treewidth(root.left, k+1);

treewidth(root.right, k+1);

}

最後將max輸出即為樹的寬度。

用遞迴雖然**簡單,但其實執行時有乙個入棧和出棧的過程。

由於二叉樹的自身特性,使得二叉樹的問題基本上都可以用到遞迴。

遞迴求二叉樹的高度

用遞迴求樹的高度,哎。平時很少用指標,寫起來挺吃力的 include include includetypedef struct bnode btnode int max int x,int y btnode create 建樹 return t void print btnode t int hi...

求二叉樹寬度

題目 乙個二叉樹採用二叉鍊錶儲存,設計乙個函式計算這個二叉樹的寬度 解題思路 採用層次遍歷,將每乙個結點的資訊儲存在陣列中,結點的資訊包括這個結點的層數,以及結點的左右子樹,資料型別 為char型字元 然後對這個陣列進行遍歷,層號數目最多的即為該二叉樹最大寬度處的層號,然後計算這個層號的數目,即為最...

求二叉樹高度

函式介面定義 int getheight bintree bt 其中bintree結構定義如下 typedef struct tnode position typedef position bintree struct tnode 要求函式返回給定二叉樹bt的高度值。裁判測試程式樣例 include...