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...