二叉搜尋樹轉換為雙向鍊錶的非遞迴實現方法

2021-09-14 05:02:19 字數 692 閱讀 2345

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

首先從根節點開始,一直遍歷右子節點temp並把它們(包括根節點)依次壓棧。

然後再把棧頂節點出棧,判斷當前目標雙向鍊錶的頭(newhead)是不是空,如果為空則將出棧的第乙個節點(即原二叉樹的最右邊的葉子節點)設定為newhead;不為空則將出棧的節點small和newhead連在一起,並將small設為新的newhead。【其實這裡的主要思想是,先把右節點壓棧是為了保證出棧的節點(除了第一次出棧的)節點,即原二叉樹的最右邊的葉子節點)都會比當前雙向鍊錶的頭newhead小,然後每次將newhead和small合併起來的操作就都是一樣的了】

接著把下乙個要遍歷的節點temp設定為當前彈出節點small的左節點,這一步相當於後續會把當前彈出節點small的左子樹轉換為雙向鍊錶。

左子樹轉換完成後又會將右子節點為small的節點出棧,此時newhead不為空,執行對應的操作。

具體**如下:(通過了牛客網的測試)

/*

struct treenode

};*/

class solution

else

else

temp = small->left;}}

return newhead;

}};

二叉搜尋樹轉換為有序雙向鍊錶

一 問題描述 輸入一棵二叉搜尋樹,現在要將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。而且在轉換的過程中,不能建立任何新的結點,只能調整樹中的結點指標的指向來實現。二 實現思路 在二叉搜尋樹中,每個結點都有兩個分別指向其左 右子樹的指標,左子樹結點的值總是小於父結點的值,右子樹結點的值總是大於父結點的值。...

將二叉搜尋樹轉換為雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。好悲傷,面試微軟的時候被遇到這個題,知道大體思路,但是最終 沒寫好,由此可見平常學東西不紮實。總是淺嘗輒止。思路 使用中序遍歷,儲存已經建好的雙向鍊錶的最後乙個節點。那麼處理當...

將二叉搜尋樹轉換為雙向鍊錶

二叉搜尋樹的定義 若它的左子樹不空,則左子樹上所有結點的值均小於它的根結點的值 若它的右子樹不空,則右子樹上所有結點的值均大於它的根結點的值 它的左 右子樹也分別為二叉排序樹。題目描述 輸入一棵二叉搜尋樹,將其轉換為排序的雙向鍊錶,要求是不能建立任何新的節點,只能調整樹中節點指標的指向。public...