劍指Offer(26) 二叉搜尋樹與雙向鍊錶

2021-09-14 08:24:25 字數 739 閱讀 4165

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

二叉搜尋樹的特點:左結點的值 < 根結點的值 < 右結點的值,所以二叉搜尋樹中序遍歷的序列,就是排序的順序。

根據排序雙向鍊錶的定義,根結點將和它的左子樹的最大乙個結點鏈結起來,同時它還將和它右子樹最小的結點鏈結起來。

在中序遍歷過程中,當遍歷到根結點時,它的左子樹已經轉換成乙個排序的好的雙向鍊錶,並且當前指標指向鍊錶中最後乙個的結點。將其與根結點鏈結起來,此時根結點就成了最後乙個結點,接著遍歷右子樹,並把根結點和右子樹中最小的結點鏈結起來。

例如:[4]

[2]   [6]

[1] [3] [5] [7]

排序的雙向鍊錶: -4-

public

class

solution

private

void

convertcore

(treenode prootoftree)

// 遞迴遍歷左子樹

convertcore

(prootoftree.left);if

(prenode == null)

else

// 遞迴遍歷右子樹

convertcore

(prootoftree.right);}

}

劍指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追加到左子樹鍊錶...