面試題27 二叉搜尋樹與雙向鍊錶

2022-03-06 16:42:50 字數 933 閱讀 8562

題目:輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。比如輸入下圖中左邊兒茶搜尋樹,則輸出轉換後的排序雙向鍊錶。

10 /\

614 / \ /\ 4

812164=6=8=10=12=14=16

將二叉搜尋樹轉化為有序雙向鍊錶,類似於中序遍歷,中序遍歷的結果就是乙個排序的數字。因此在程式中以中序遍歷樹,當遍歷左子樹到在葉子結點的時候,開始修改指標。 

**例項:

view code

#include#include

using

namespace

std;

struct

binarytreenode;//

建立二叉樹結點

binarytreenode* createbinarytreenode(int

value)

void connecttreenodes(binarytreenode* pparent,binarytreenode* pleft,binarytreenode*pright)

}void inorderprinttree(binarytreenode* proot)//

中序遍歷

else

}void convert(binarytreenode* pnode,binarytreenode**plastnodeinlist)

binarytreenode* convert(binarytreenode*proot)

//輸出雙向鍊錶

void printlist(binarytreenode*proot)

printf(

"\nprintlist ends.\n");

}void

main()

面試題27 二叉搜尋樹與雙向鍊錶

題目描述 輸入一棵二叉搜尋樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只能調整樹中結點指標的指向。解 見 注釋 struct treenode class solution void convert treenode proot,treenode plastnodeinli...

面試題27二叉搜尋樹與雙向鍊錶

比如輸入圖4.12 中左邊的二叉搜尋樹,則輸出轉換之後的排序現向鍊錶。在二叉樹中,每個結點都有兩個指向子結點的指標。在雙向鍊錶中,每個結點也有兩個指標,它們分別指向前乙個結點和後乙個結點。由於這兩種結點的結構相似,同時二叉搜尋樹也是一種排序的資料結構,因此在理論上有可能實現二叉搜尋樹和排序的雙向鍊錶...

面試題27 二叉搜尋樹與雙向鍊錶

題目 輸入一顆二叉搜尋樹,將該二叉搜尋樹轉換為乙個排序的雙向鍊錶。要求不能建立 任何新的結點,只能調整樹種結點指標的指向。比如輸入下圖的二叉搜尋樹,則輸出轉換 後的雙向排序鍊錶。1 102 36 144 54 81216 轉換後的雙向排序鍊錶為 1468 1012 1416 首先 要明白二叉搜尋樹是...