有序陣列轉化為二叉樹(leetcode108)

2021-10-01 15:29:21 字數 813 閱讀 6069

題目:

將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。

本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 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...