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

2022-09-05 18:54:15 字數 1195 閱讀 6677

1. 題目

2. 解答

2.1. 方法一

在 leetcode 108——將有序陣列轉化為二叉搜尋樹 中,我們已經實現了將有序陣列轉化為二叉搜尋樹。因此,這裡,我們可以先遍歷一遍鍊錶,將節點的資料存入有序陣列中,然後再將有序陣列轉化為二叉搜尋樹即可。

class solution 

return sortedarraytobst(nums, 0, nums.size()-1);

}treenode* sortedarraytobst(vector& nums, int begin, int end)

};

2.2. 方法二

將有序陣列轉化為二叉搜尋樹的核心思想就是找到陣列的中間資料,以此為根節點,然後再遞迴建立左右子樹。因此,借助於 leetcode 876——鍊錶的中間結點 中的思想,我們可以快速地找到鍊錶的中間節點,然後再以中間節點前後的兩個子鏈分別建立左右子樹即可。

如下圖所示,當 slow 指標指向中間節點時,last 指標指向中間節點的上乙個節點,slow->next 是右子鏈的頭結點,而將 last->next 指向 null 後,左子鏈的頭節點即為 head。

此外,要注意一種特殊情況,當只有乙個節點時,此時 last、slow、fast 都指向這個節點,那麼左子鏈此時應為空

treenode * tree = new treenode(slow->val); // 中值作為根節點

if (last == slow) tree->left = null;

else

tree->right = sortedlisttobst(slow->next); // 右子樹

return tree;}};

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 它可以表示下面這個高度平衡二叉搜...

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

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