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

2021-10-04 15:31:36 字數 726 閱讀 8399

** 題目描述**

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。

** 解題思路 **

先明確二叉搜尋樹的性質:父節點的值大於其左孩子的值,小於其右孩子,中序遍歷二叉搜尋樹可以得到乙個非遞減的有序序列。由此可以知道,將乙個樹中的節點轉換為鍊錶時,其前序節點可能為:

左子樹左子樹的右子樹

其後續節點可能為:

右子樹右子樹的左子樹

** **實現**

public treenode convert

(treenode prootoftree)

tree2list

(prootoftree)

;// 調整至雙聯表結構

treenode listhead = prootoftree;

for(

;listhead.left != null; listhead = listhead.left)

;return listhead;

}public

void

tree2list

(treenode p)

if(p.left == null && p.right == null)

else

else}if

(p.right != null)

else}}

}

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 將二叉搜尋樹convert為雙向鍊錶,嘗試遞迴解決。遞迴關係 當訪問到節點root時,root left與轉換後的左子樹鍊錶完成互指,root right與轉換後的右子樹鍊錶完成互...

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

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。分析 遞迴 struct treenode class solution if prootoftree left null prootoftree right null 1 將...

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解題思路 類似於遞迴的中序遍歷 1.將左子樹構造成雙鏈表,並返回煉表頭節點。2.定位至左子樹雙鏈表最後乙個節點。3.如果左子樹煉表不為空的話,將當前prootoftree追加到左子樹鍊錶...