題目:
將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。
示例:給定有序陣列: [-10,-3,0,5,9],
乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
0/ \
-3 9
/ /
-10 5
大體思路:
剛看到這道題的時候開始的思路為:先建立乙個頭結點,然後依次往裡插入,並通過左旋右旋的方式調整。後來感覺這樣的話並沒有充分利用有序陣列的條件,仔細一看這nm不是二分搜尋嘛。
選擇陣列中最中間的元素作為根結點並劃分陣列,左邊的作為左子樹,右邊的作為右子樹。對於左/右子樹部分依然按照該方式劃分,乙個簡單的遞迴即可完成。不過需要注意遞迴的結束條件應該是輸入的陣列為空。
實現**:
class solution
public treenode selution(int nums, int left, int right)
int mid = left + (right - left) / 2;
treenode current = new treenode(nums[mid]);
current.left = selution(nums, left, mid - 1);
current.right = selution(nums, mid + 1, right);
return current;
}}
將有序陣列轉化為二叉搜尋樹
將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 9 10...
樹轉化為二叉樹 森林轉化為二叉樹(詳解版)
前面介紹了普通樹轉化為二叉樹的孩子兄弟表示法,本節來學習如何將森林轉化為一整棵二叉樹。森林,指的是由 n n 2 棵互不相交的樹組成的集合,如圖 1 所示。在某些實際場景中,為了便於操作具有森林結構的資料,往往需要將森林轉化為一整棵二叉樹。我們知道,任意一棵普通樹都可以轉化為二叉樹,而森林是由多棵普...
將公升序陣列轉化為平衡二叉搜尋樹
給定乙個公升序排序的陣列,將其轉化為平衡二叉搜尋樹 bst 平衡二叉搜尋樹是指樹上的每個節點 node 都滿足左子樹中所有節點的的值都小於 node 的值,右子樹中所有節點的值都大於 node 的值,並且左右子樹的節點數量之差不大於1。示例 輸入 nums 10,3,0,5,9 輸出 0,3,9,1...