輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
牛客網題目鏈結
我們可以中序遍歷二叉搜尋樹,並將遍歷到的結點儲存起來,這樣得到的結點的值是從小到大排序的,然後再修改指標關係。
這樣做法的缺點是需要申請額外的儲存空間。
/*
struct treenode
};*/
class
solution
return rehead;
}void
convert
(treenode *root,vector >
&arr)
};
占用記憶體:480k
我們以中序的順序遍歷結點,當遇到當前結點沒有左子樹的時候將其儲存,並繼續中序遍歷,當遇到下乙個結點時修改該結點的left
指標,讓其指向上一結點,並讓上一結點的right
指標指向該結點。
重複這一過程,直到所有的結點都被遍歷到,則所有的指標修改完成。
最終,我們只需要找到頭結點並返回即可。
/*
struct treenode
};*/
class
solution
rehead=tmp;
return rehead;
}void
con(treenode *root,treenode *
*last)
};
占用記憶體:376k 二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...