構建最小高度樹

2021-10-07 04:50:28 字數 1398 閱讀 2436

遞迴解題思路解析

面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、遞迴函式的返回值是乙個節點指標,而ptrauto構造,故可以返回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 代表這...