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 ...