輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
二叉搜尋樹按中序遍歷有序,因此我們只需按照中序遍歷的順序修改指向,但是如何知道left該指向的前乙個節點了,所以我們需要乙個指標pre在遍歷時儲存前乙個結點。
pre賦初值為nullptr
若pre不為nullptr,所以pre為當前根節點中序的前乙個結點,修改指向即可。
當遍歷到最左節點時,此時pre==nullptr,則只需要將當前根賦給pre就行
,因為最左節點的left指向為nullptr,right指向其父節點必然是遍歷的下乙個結點,因此無需修改指向。
/*
struct treenode
};*/
class
solution
//注意這裡如果放在if上邊則會造成直接過濾掉pre為空的情況
//記錄當前結點,方便下次修改指向
pre=prootoftree;
//右convert
(prootoftree-
>right)
;//返回煉表頭
return head;}}
;
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...