將一棵二叉樹轉換為雙向鍊錶的倆中演算法

2021-06-29 07:14:55 字數 1163 閱讀 9636

要求:輸入一棵二叉排序樹,將該二叉搜尋樹轉換成乙個排序的雙向鍊錶。要求不能建立新的結點,只能調整樹中結點的指標的指向。如下圖:

方法一:我們借助乙個容器來順序儲存結點的指標,然後改變指標的指向。

1

//二叉搜尋樹與雙向鍊錶(方法一)//2

3void convertfirst(binarytreenode* proot , vector&vec)411

}12 binarytreenode* convert1(binarytreenode*proot)

1318 vectorvec ;

19convertfirst(proot ,vec);

20 binarytreenode* phead = vec[0

];21 vector::iterator it =vec.begin();

22for ( ; it != vec.end()-1;it++)

2327

28return

phead ;

29 }

方法二:我們邊遍歷邊改變指標的指向。

1

//二叉搜尋樹與雙向鍊錶(方法二)//2

void convertnode(binarytreenode* pnode , binarytreenode**plastnodelist)

312 *plastnodelist =pnode ;

13 convertnode(pnode->m_pright , plastnodelist);14}

15}1617 binarytreenode* convert2(binarytreenode*proot)

1823 binarytreenode* plastnodelist =null ;

24 convertnode(proot ,&plastnodelist);

25while (plastnodelist && plastnodelist->m_pleft)

2629

30return

plastnodelist;

31 }

將二叉樹轉換為排序雙向鍊錶

對二叉樹進行中序遍歷,得到乙個排序的序列,然後調整樹節點的指標即可得到 版本1 非遞迴 treenode convert treenode prootoftree p stacktree.top stacktree.pop if flag else p p right return root 版本2...

二叉樹轉換為雙向鍊錶

根據前序遍歷和中序遍歷還原構造二叉樹 思路 1 開始時雙向迴圈鍊錶為空,第乙個節點應該為最左邊的節點 2 中序遍歷二叉樹,將輸出的每個節點加到新建立的雙向鍊錶的末尾 include include using namespace std 樹的前序遍歷 int preorder1 樹的中序遍歷 int...

二叉樹轉換為雙向鍊錶

1.把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標的指向。10 6 14 4 8 12 16 轉換成雙向鍊錶 4 6 8 10 12 14 16。首先我們定義的二元查詢樹 節點的資料結構如下 struct bs...