遞迴解題思路解析
面04.02.給定乙個有序整數陣列,元素各不相同且按公升序排列,編寫乙個演算法,建立一棵高度最小的二叉搜尋樹。示例:給定有序陣列: [-10,-3,0,5,9],乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:
0/ \
-3 9
/ /-10 5
樹、陣列、有序、平衡、二叉
對生成樹,特別不熟悉,不知道怎麼寫第一行**,
乙個思路是,二分,然後遞迴構造子樹
將二分融合到遞迴方式構建樹,平時的二分都是**while(l<=r)**結構
1、生成樹,指定乙個指向根節點的指標,並用new關鍵字構造節點,生成的就是指向該節點的指標
auto ptr=
newtreenode
(nums[mid]
);
2、遞迴函式的返回值是乙個節點指標,而ptr用auto構造,故可以返回ptr
3、遞迴函式,從主函式中分出來,
4、遞迴函式的內部,先寫終止條件:應該返回nullptr,而不是只寫乙個return,再生成根節點,再左子樹,右子樹。通過ptr->left和ptr->right再次遞迴呼叫自己,來實現while(l r.
/**
* definition for a binary tree node.
* struct treenode
* };
*/class
solution
treenode*
dfs(
const vector<
int>
& nums,
int left,
int right)
// 返回值型別就是指向樹節點的指標
int mid=left+
(right-left)/2
;// 取中
auto ptr=
newtreenode
(nums[mid]);
// 建立根節點,new直接treenode(乙個數)就建立了乙個節點
ptr->left=
dfs(nums,left,mid-1)
; ptr->right=
dfs(nums,mid+
1,right)
;return ptr;}}
;
310 最小高度樹
對於乙個具有樹特徵的無向圖,我們可選擇任何乙個節點作為根。圖因此可以成為樹,在所有可能的樹中,具有最小高度的樹被稱為最小高度樹。給出這樣的乙個圖,寫出乙個函式找到所有的最小高度樹並返回他們的根節點。格式該圖包含n個節點,標記為0到n 1。給定數字n和乙個無向邊edges列表 每乙個邊都是一對標籤 你...
leetcode 最小高度樹
給定乙個有序整數陣列,元素各不相同且按公升序排列,編寫乙個演算法,建立一棵高度最小的二叉搜尋樹。由於陣列已經是有序陣列,所以構建二叉搜尋樹並不難,基於二叉樹的特性,我們將陣列劃分為兩部分,遞迴構建其左右子樹即可.對於題目中要求的高度最小,我們知道一棵平衡樹是高度最小的二叉樹.因此我們每次切分應當保證...
題目1536 樹的最小高度
題目描述 給定一棵無向樹,我們選擇不同的節點作為根節點時,可以得到不同的高度 即樹根節點到葉子節點距離的最大值 現在求這棵樹可能的最低高度。輸入 輸入可能包含多個測試案例。對於每個測試案例,輸入的第一行為乙個整數n 1 n 1000000 接下n 1行,每行包括兩個整數u,v 0 u,v n 代表這...