將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。
本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 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...