1.問題描述
輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。(來自《劍指offer》)
2.分析
對於二叉搜尋樹我們知道,樹的左孩子都比根節點要下,樹的右孩子都比根結點要大,根據這個特點,我們進行中序遍歷得到的序列就會滿足題目的要求,我們另外需要做的就是對結點的指標進行操作,記錄一下上次訪問的元素,將當前元素的left指標指向上次訪問的元素,在把上次訪問的元素的right指標指向當前元素即可。
3.**
void converse(treenode* node,treenode** lastnodeinlist)
treenode *current = node;
if (current->lchild != null)
current->lchild = *lastnodeinlist;
if (*lastnodeinlist != null)
*lastnodeinlist = current;
if (current->rchild)
}
二叉搜尋樹與雙向鍊錶
問題描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。演算法 struct binarytreenode binarytreenode convert binarytreenode prootoftree plastnodeinl...
二叉搜尋樹與雙向鍊錶
排序二叉樹與雙向鍊錶.cpp 定義控制台應用程式的入口點。題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。思路 通過對一顆排序二叉樹的認識可知一顆排序二叉樹中序輸出就是有序的 通過後序遍歷讓子樹分別找到自己的left和rig...
二叉搜尋樹與雙向鍊錶
要求 輸入棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的節點,只能調整樹種結點指標的指向。具體見劍指offer題27。分析 在二叉樹中,每個節點都有兩個指向子節點的指標。而在雙向鍊錶中,每乙個節點也有兩個指標,分別指向向前和後向的節點。因此這兩種資料結構有相似之處,並且二...