二元查詢樹轉變成排序的雙向鍊錶

2021-06-19 09:22:24 字數 894 閱讀 4857

描述:輸入一顆二元查詢樹,將二元查詢樹轉換成乙個排序的雙向鍊錶。要求不能建立人新建立的結點,只調整指標的指向。

我的思路:利用遞迴思想進行解答。

1.分解,將結點p分解成左子樹和右自樹兩個部分。

2.解決子問題,左子樹變成乙個雙向鍊錶,右子樹變成乙個雙向鍊錶。

3.合併,將結點p的left 連線到左子樹中最大的結點,將結點p的rignt連線到右子樹中最小的結點。

最後,將root指向最小結點。

**如下:

template struct node;

template class btree

virtual ~btree()

node* getmin(node*node)

while (node->left!=null)

return node;

} node* getmax(node* node)

while (node->right!=null)

return node;

} void change(node* node)

root = node;

} void changetolist(node* node)

changetolist(node->left);

changetolist(node->right);

node->left = getmax(node->left);

if (node->left!=null)

node->right = getmin(node->right);

if (node->right!=null)

} void print(node* root)

cout<* root;

};

二元查詢樹轉變成排序的雙向鍊錶

把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排 序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。10 6 14 4 8 12 8 轉換成雙向鍊錶 4 6 8 10 12 14 16 利用中序遍歷來解決比較簡單,這裡我主要提供一種非遞迴版本來解決這個問題 遞迴版本 c...

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

1.首先是如何建立乙個二叉查詢樹 2.再對二叉查詢樹進轉換 如下 bstreenode1.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std struct bstreenode typedef bstreenode doubl...

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

把二元查詢樹轉變成排序的雙向鍊錶 題目 輸入一棵二元查詢樹,將該轉換成個排序的雙向鍊錶。要求不能建立任何新的結點,只調整指標向。include include typedef struct bittree bittree void addnode bittree root,int value p r...