二叉樹轉雙向鍊錶

2021-07-11 16:26:57 字數 1244 閱讀 9720

1.a)遞迴轉化左子樹為雙向鍊錶;

1.b)找出根結點的前驅節點(是左子樹的最右的節點)

1.c)將上一步找出的節點和根結點連線起來

2,如果右子樹不為null,處理右子樹(和上面的很類似)

1.a)遞迴轉化右子樹為雙向鍊錶;

1.b)找出根結點的後繼節點(是右子樹的最左的節點)

1.c)將上一步找出的節點和根結點連線起來

3,找到最左邊的節點並返回

下面是**實現:

bintree2listutil函式返回的node* 是root節點,bintree2list函式返回的是頭節點

this is the core function to convert tree to

list

. this function follows

steps 1

and2 of the above algorithm *

/node* bintree2listutil(node* root)

// convert the right subtree and link to root

if (root->right!=

null)

return root;

}// the main function that first calls bintree2listutil(), then follows step 3

// of the above algorithm

node* bintree2list(node *root)

{ // base case

if (root ==

null)

return root;

// convert to dll using bintree2listutil()

root = bintree2listutil(root);

// bintree2listutil() returns root node of the converted

// dll. we need pointer to the leftmost node which is

// head of the constructed dll, so move to the leftmost node

while (root->left !=

null)

root = root->left;

return (root);

二叉樹轉雙向鍊錶

include using namespace std 樹節點 struct node typedef struct node link 構造樹 void insert tree link h,int t if h val t insert tree h left,t else insert tre...

二叉樹轉雙向鍊錶

這是一道挺有趣的題,其解題的思路主要還是二叉樹的中序遍歷 先建立乙個頭結點list,然後通過中序遍歷二叉樹,把結點串起來即可!注意點 1 需要有乙個指標來指向上乙個已遍歷過的結點 2 如果不建立頭結點,在後面遍歷判斷時比較麻煩 include using namespace std struct n...

程式設計練習 二叉樹(二叉樹轉雙向鍊錶)

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