它是一 棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉(搜尋)樹。
二分:用有序陣列中中間的數生成搜尋二叉樹的頭節點,然後對陣列的左右部分分別生成左右子樹即可(重複過程)。
生成的二叉樹中序遍歷一定還是這個序列。
非常簡單,不過多敘述:
public class sortedarraytobalancedbst
} public static node generatetree(int sortarr)
return generate(sortarr, 0, sortarr.length - 1);
} public static node generate(int sortarr, int start, int end)
int mid = (start + end) / 2;
node head = new node(sortarr[mid]);
head.left = generate(sortarr, start, mid - 1);
head.right = generate(sortarr, mid + 1, end);
return head;
} // for test -- print tree
public static void printtree(node head)
public static void printinorder(node head, int height, string to, int len)
printinorder(head.right, height + 1, "v", len);
string val = to + head.value + to;
int lenm = val.length();
int lenl = (len - lenm) / 2;
int lenr = len - lenm - lenl;
val = getspace(lenl) + val + getspace(lenr);
system.out.println(getspace(height * len) + val);
printinorder(head.left, height + 1, "^", len);
} public static string getspace(int num)
return buf.tostring();
} public static void main(string args) ;
printtree(generatetree(arr));
}}
平衡二叉搜尋樹
二叉搜尋樹的問題 平衡 banlance 平衡 當節點數量固定時,左右子樹的高度越接近,這棵二叉樹就越平衡 高度越低 最理想的狀態就是像完全二叉樹 滿二叉樹那樣,高度是最小的。前提 節點的新增 刪除順序是無法限制的,可以認為是隨機的。改進方案 在節點的新增 刪除操作之後,想辦法讓二叉搜尋樹恢復平衡 ...
陣列建立二叉搜尋樹
最近學習了一下用陣列建立二叉搜尋樹,感覺自己又提高了一點點,好高興!下面寫個模板,功能是 輸入 n 接下來輸入 n 個數,建立二叉搜尋樹。include include include include include using namespace std int arr 1000 void set...
平衡二叉樹建立
time limit 400 ms memory limit 65536 kib include include include struct node int max int a,int b 深度 int deep struct node root struct node ll struct no...