輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
方法1:遞迴
給定的是一棵bst
,中序遍歷的結果就是乙個有序序列,所以只要將給定的節點遞迴的連線到鍊錶的尾部,一定要處理好左右指標和最後將指標回溯到頭節點才可以返回雙向鍊錶
//將雙向指標連線起來
ptmp->left = *plist;
if(*plist)
//鍊錶的節點後移
*plist = ptmp;
//遞迴右子樹
if(ptmp->right)
}treenode* convert(treenode* prootoftree)
return phead;}};
方法2:非遞迴
要求不能開闢新的節點,但是可以借助棧,將中序序列節點壓入棧中,棧頂的元素就是bst
的最大節點值,之後從棧中彈出連線即可
劍指offer 二叉搜尋樹與雙向連線
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。普通的二叉樹也可以轉換成雙向鍊錶,只不過不是排序的 思路 與中序遍歷相同 採用遞迴,先鏈結左指標,再鏈結右指標 1,更改doublelinkedlist,最後返回list的第乙...
《劍指offer》 二叉搜尋樹與雙向鍊錶
題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解法 主要應用到二叉樹的中序遍歷。將左子樹遍歷進行不斷壓棧,然後再出棧。用兩個指標,current指向當前的樹的節點,pre指向前乙個節點,然後進行改指標引用,把壓棧的節點進行...
《劍指offer》二叉搜尋樹與雙向鍊錶
輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向 輸入一棵二叉搜尋樹 將該二叉搜尋樹轉換成乙個排序的雙向鍊錶 struct treenode class solution 按照中序遍歷,按照左子樹 根節點 右子樹的順序。include ...