題目要求:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。
解決思路:
1. 根據觀察可知,雙向鍊錶順序即為二叉樹的中序遍歷結果----->採用中序遍歷+遞迴;
2. 中序遍歷順序為:左+中+右,傳入乙個變數pre。
pre可以這樣理解:當前結點的pre就是當前結點的前驅。如結點6的前驅是4,結點10的前驅是8.結點4的前驅是null。
#include using namespace std;
typedef struct binarytree
binarytree;
void inittree(binarytree **p);
void printlist(binarytree *list);
binarytree *treetolist(binarytree *ptree);
int main(void)
// 1
// / \
// 2 3
// / \
// 4 5
void inittree(binarytree **p)
void printlist(binarytree *list)
list = list->right;}}
//--------------核心**------------------------
void convert(binarytree *ptree,binarytree **pre)
binarytree *treetolist(binarytree *ptree)
二叉搜尋樹與雙向鍊錶
1.問題描述 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。來自 劍指offer 2.分析 對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們...
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...