劍指offer JZ26二叉搜尋樹與雙向鍊錶

2021-10-08 17:07:13 字數 987 閱讀 2956

時間限制: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。首先,我們知道 在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個...