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

2021-06-03 06:47:43 字數 1079 閱讀 4864

1.把二元查詢樹轉變成排序的雙向鍊錶 ****

題目:輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。

要求不能建立任何新的結點,只調整指標的指向。

10/ /

6  14

/ / / /

4  8 12 16

轉換成雙向鍊錶

4=6=8=10=12=14=16。

首先我們定義的二元查詢樹 節點的資料結構如下:

struct bstreenode

;void insert(treenode* &root, const int key)

if (key >= root->value_) else

}void print(treenode* root) else

if (root->left_)

if (root->right_)

}void converttolist(treenode*& root)

root->left_ = left_most_right;

if (left)

if (left_most_right)

treenode* right_most_left = right;

while (right_most_left && right_most_left->left_)

root->right_ = right_most_left;

if (right)

if (right_most_left)

}}int main(int argc, char** argv) ;

treenode* root = null;

size_t size = sizeof(data)/sizeof(int);

for (int i = 0; i < size; ++i)

// print(root);

treenode * indexer = root;

converttolist(root);

while (indexer)

if (root)

while (indexer)

}

二叉樹轉雙向鍊錶

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...

二叉樹轉雙向鍊錶

1.a 遞迴轉化左子樹為雙向鍊錶 1.b 找出根結點的前驅節點 是左子樹的最右的節點 1.c 將上一步找出的節點和根結點連線起來 2,如果右子樹不為null,處理右子樹 和上面的很類似 1.a 遞迴轉化右子樹為雙向鍊錶 1.b 找出根結點的後繼節點 是右子樹的最左的節點 1.c 將上一步找出的節點和...

二叉樹轉雙向鍊錶

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