21 將有序陣列轉換為二叉搜尋樹

2022-10-08 19:27:11 字數 830 閱讀 2282

/*給你乙個整數陣列 nums ,其中元素已經按 公升序 排列,請你將其轉換為一棵 高度平衡 二叉搜尋樹。

高度平衡 二叉樹是一棵滿足「每個節點的左右兩個子樹的高度差的絕對值不超過 1 」的二叉樹。

分析:bst的中序遍歷是公升序的,因此本題等同於根據中序遍歷的序列恢復二叉搜尋樹。因此我們可以以公升序序列中的任乙個元素作為根節點,以該元素左邊的公升序序列構建左子樹,以該元素右邊的公升序序列構建右子樹,這樣得到的樹就是一棵二叉搜尋樹啦~ 又因為本題要求高度平衡,因此我們需要選擇公升序序列的中間元素作為根節點奧~

*//**

* definition for a binary tree node.

* public class treenode

* treenode(int val)

* treenode(int val, treenode left, treenode right)

* }*/class solution

private treenode dfs(int nums, int lo, int hi)

// 以公升序陣列的中間元素作為根節點 root。

int mid = lo + (hi - lo) / 2;

treenode root = new treenode(nums[mid]);

// 遞迴的構建 root 的左子樹與右子樹。

root.left = dfs(nums, lo, mid - 1);

root.right = dfs(nums, mid + 1, hi);

return root;

}}

將有序陣列轉換為二叉搜尋樹

示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 9 10 5大致思路,二叉搜尋樹的特性就是根節點的左子樹中的數都小於根節點,右子樹都大於根節點。這就想到了用二分法,找到中間的數,則這個數左邊的數比它小,右邊數比...

將有序陣列轉換為二叉搜尋樹

將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。示例 給定有序陣列 10,3,0,5,9 乙個可能的答案是 0,3,9,10,null,5 它可以表示下面這個高度平衡二叉搜尋樹 0 3 9 10...

將有序陣列轉換為二叉搜尋樹

題目 將有序陣列轉換為二叉搜尋樹 力扣 108 將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。分析二叉樹中序遍歷的逆序。找到陣列的中間位置,作為根節點,這時將陣列分為2個部分,遞迴實現節點構建...