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

2021-08-16 12:12:45 字數 656 閱讀 1023

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

思路:將二叉搜尋樹convert為雙向鍊錶,嘗試遞迴解決。遞迴關係:當訪問到節點root時,root->left與轉換後的左子樹鍊錶完成互指,

root->right與轉換後的右子樹鍊錶完成互指。根據題意,令返回值為最左節點,若root存在左子樹,也就是左子樹鍊錶的指標,當不存

在左子樹,返回根節點指標。由於返回的指標是最左的,而root->left要指向左子樹鍊錶最右的指標,所以連線左子樹煉表時,要將返回

的指標移到最右。而root->right就是連線右子樹最左指標,可直接連線。

*/class solution

if (prootoftree->left != null)

return prootoftree;}};

/*中序遍歷思路(建議解法):

中序遍歷對節點的訪問順序和轉換完鍊錶從左到右的順序是一樣的。所以在中序遍歷時完成相鄰兩個節點的互指即可。具體做法是把前乙個節點記錄下來然後pre->right = cur; cur->left = pre。

*/class solution

void converthelper(treenode* cur, treenode*& pre)

};

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

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

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

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

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

輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。二叉搜尋樹的特點 左結點的值 根結點的值 右結點的值,所以二叉搜尋樹中序遍歷的序列,就是排序的順序。根據排序雙向鍊錶的定義,根結點將和它的左子樹的最大乙個結點鏈結起來,同時它還將和它右子...