LeetCode 有序鍊錶轉換二叉搜尋樹

2021-09-11 03:06:13 字數 1545 閱讀 7175

給定乙個單鏈表,其中的元素按公升序排序,將其轉換為高度平衡的二叉搜尋樹。

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

示例:

給定的有序鍊錶: [-10, -3, 0, 5, 9],

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

0/ \

-3 9

/ /

-10 5

請先翻閱 leetcode 將有序陣列轉換為二叉搜尋樹
/**

* definition for singly-linked list.

* struct listnode

* };

*//**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

nums = vector();

//首先將所有的節點val複製到nums中,然後對半構建即可

while (head != null)

int numssize = nums.size();

return buildtree(0, numssize - 1);//開始構建

}//nums[left, right]轉換為一棵高度平衡二叉搜尋樹

方法二:直接在鍊錶中進行轉換

class solution 

return length;

} //遞迴生成二叉搜尋樹

treenode* generatebst(listnode* head, int low, int high)

listnode* midptr = head;

int mid = (low + high) / 2;

for (int i = low; i < mid; ++i)

treenode* curptr = new treenode(midptr->val);//當前根節點

curptr->left = generatebst(head, low, mid - 1);//構建左子樹

curptr->right = generatebst(midptr->next, mid + 1, high);//構建右子樹

leetcode 有序鍊錶轉換二叉搜尋樹

這道題需要定義三個指標,通過快慢指標找出中點,作為根節點,然後從頭指標head 指標last這段鍊錶再遞迴呼叫sortedlisttobst函式,從slow指標下乙個節點開始到最後,作為後乙個鍊錶再進行遞迴呼叫函式sortedlisttobst函式。definition for singly lin...

LeetCode109 有序鍊錶轉換二叉搜尋樹

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

LeetCode 109 有序鍊錶轉換二叉搜尋樹

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