時間限制:c/c++ 1秒,其他語言2秒輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。空間限制:c/c++ 32m,其他語言64m
熱度指數:458676
本題知識點: 鍊錶 樹
/* function treenode(x) */
function
convert
(prootoftree)if(
!prootoftree.left &&
!prootoftree.right)
//構建左子樹的雙鏈表,left看做已經排好序的表頭
let left =
convert
(prootoftree.left)
;//此時p為乙個鍊錶,不算做創造新結點
let p = left;
//找到左子樹所構建鍊錶的最右結點
while
(p && p.right)
//如果左鍊錶存在,左鍊錶的最右結點的右邊結點即是原始頭結點
if(left)
//構建右子樹雙鏈表,返回表頭
let right =
convert
(prootoftree.right)
;//如果右鍊錶存在,右鍊錶的最左結點的左邊結點即是原始頭結點
if(right)
//如果left為空,表頭為prootoftree,反之則表頭為left
return left!=
null
? left : prootoftree;
}
分析:
二叉查詢樹:它或者是一棵空樹,或者是具有下列性質的二叉樹: 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值; 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值; 它的左、右子樹也分別為二叉排序樹。
劍指offer JZ26 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 二叉搜尋樹 bst 若二叉搜尋樹根節點的左子樹不為空,則根節點的左子樹所有節點值均小於根節點值,若根節點的右子樹不為空,則根節點的右子樹所有節點值均大於根節點 二叉搜尋樹的中序遍歷...
劍指 Offer JZ39 平衡二叉樹
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。在這裡,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹 平衡樹 平衡樹 balance tree,bt 指的是,任意節點的子樹的高度差都小於等於1。二叉排序樹 一棵空樹,或者是具有下列性質的二叉樹 若左子樹不空,則左子樹上所有結點的值均小於它的根結...
劍指offer No 26 二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。比如將二元查詢樹 10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。首先,我們知道 在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個...