108 將有序陣列轉換為二叉搜尋平衡樹 遞迴

2021-09-27 12:11:58 字數 1244 閱讀 8927

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

本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:給定有序陣列: [-10,-3,0,5,9],

乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:

0

/ \

-3 9

/ /-10 5

/**

* definition for a binary tree node.

* struct treenode

* };

搜尋樹:對於每個節點,它的左孩子都比根節點小,右孩子都比根節點大

平衡樹:對於每個節點,他們高度差的絕對值不大於1

*/class solution

int middle=nums.size()/2;

treenode *root=new treenode(nums[middle]);

vectorleft(nums.begin(),nums.begin()+middle),right(nums.begin()+middle+1,nums.end());

//一種初始化容器方法,注意它的區間是[,) 所以是 left(nums.begin(),nums.begin()+middle)

//而不是left(nums.begin(),nums.begin()+middle-1)

//那為什麼nums.end()不用+1呢?因為nums.end()函式返回的就是陣列最後乙個指標+1個空間。。。。

root->left=sortedarraytobst(left);

root->right=sortedarraytobst(right);

return root;

}};

主要是拓展了vector容器的用法,學習了什麼叫平衡樹,什麼叫二叉搜尋樹

另外講解碰到的乙個錯誤

出現此錯誤可能的三種原因

a.陣列越界,在對vector初始化的時候沒有初始化到合適大小,而在接下來的使用中使用了越界的下標。

b.對於vector構建出來的二維陣列沒有進行空間的申請,比如有些返回型別為vector>型別的函式,對於這個返回值vector表示的二維陣列要先申請大小,否則使用下標訪問就會報這類錯誤。

c.對於陣列長度為0的情況沒有進行判斷,加入判斷條件就可以解決。

參考文章:

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

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

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

詳見乙個老外的的discuss。這道題考察的其實是二分查詢的知識。二叉搜尋樹的中序遍歷是乙個遞增有序序列,而中序遍歷是左根右,即根在中序遍歷的中間,則可以由中序遍歷的序列找到根的位置。找到根的位置後,將原序列分為兩個子串行,則再在每個子串行中找根。另外,從該題中還可以學到一種leetcode中初始化...

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

108.將有序陣列轉換為二叉搜尋樹 package com.test public class lesson108 int nums int nums treenode treenode sortedarraytobst nums printnode treenode treenode t1 new...