練習系列 1 把二元查詢樹轉變成排序的雙向鍊錶

2021-09-06 02:30:14 字數 2094 閱讀 4392

\author liubao
\date 2011/2/25
\brief 把二元查詢樹轉變成排序的雙向鍊錶
輸入一棵二元查詢樹,將該二元查詢樹轉換成乙個排序的雙向鍊錶。
要求不能建立任何新的結點,只調整指標的指向。
10
/ \
6  14
/ \ / \
4 8 12 16
轉換成雙向鍊錶:4=6=8=10=12=14=16。
*/
#include

#include

struct bstreenode                   ///  二元查詢樹/雙向鍊錶節點
;
enum childposition                  ///  兒子節點插入位置
;
/*!
建立值為child_value的節點,並插入為parent的pos兒子
\param parent 待插入兒子節點的父節點指標
\param pos 兒子節點插入位置
\param child_value 兒子節點的值
\return 返回新插入的兒子節點的指標
*/
struct bstreenode *add_child_to_tree(struct bstreenode *parent,
enum childposition pos,
int child_value)
}
return retval;
}
/*!
建立乙個二元查詢樹,並返回樹根指標
\return 二元查詢樹的根指標
*/
struct bstreenode *create_tree()
return root;
}
/*!
從二元查詢樹根開始,遞迴中根遍歷轉換其為有序雙向鍊錶(不可重入)
\param root 二元查詢樹根
*/
void change_ptr(struct bstreenode *root)
last = root;
change_ptr(root->m_pright);
}
}
/*!
從curr節點找到頭結點,並返回頭結點指標
\param curr 當前節點
\return 雙向煉表頭結點指標
*/
struct bstreenode *find_head(struct bstreenode *curr)
return head;
}
/*!
把根節點為root的二元查詢樹轉換為有序雙向鍊錶,並返回煉表頭指標
\param root 二元查詢樹的根節點
\return 轉換為的雙向有序煉表頭指標
*/
struct bstreenode *to_link_list(struct bstreenode *root)
int main()
printf("reverse iterate:\n");
while(tail)
}
return 0;
}

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

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

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

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