1 Star 0 Fork 127

giserDev/数据结构(C++模板实现)

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
test.cpp 21.22 KB
一键复制 编辑 原始数据 按行查看 历史
Y_Dash 提交于 2023-06-16 11:21 +08:00 . 线索树完善doxygen
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538
/*!
* @file test.cpp
* @author CyberDash计算机考研, cyberdash@163.com(抖音id:cyberdash_yuan)
* @brief 线索树测试cpp文件
* @version 0.2.1
* @date 2021-05-13
*/
#include "inorder_threaded_binary_tree.h"
/*!
* @brief **结点访问函数**
* @param node 结点
* @note
* 结点访问函数
* ----------
* ----------
*/
void visit(ThreadedNode<int>* node) {
cout << node->data << " ";
};
/*!
* @brief **测试-中序线索树-获取子树首个线索节点**
* @note
* 测试-中序线索树-获取子树首个线索节点
* -------------------------------
* -------------------------------
*
* -------------------------------
* + **1 构造线索树**\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 打印线索树的首结点数据项**\n
* 获取根结点\n
* 对根结点调用First()\n
* 打印首结点数据项\n
*
*
* -------------------------------
*/
void TestInorderThreadedTreeFirst() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedBinaryTree First |"<<endl;
cout<<"| 测试-中序线索树-获取子树首个线索节点 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
InorderThreadedBinaryTree<int> inorder_threaded_tree; // 声明inorder_threaded_tree
int node_count = 7;
for (int i = 0 ; i < node_count; i++) { // 插入整数0至6
inorder_threaded_tree.InsertRecursive(i);
}
inorder_threaded_tree.CreateThreadRecursive(); // 调用CreateThreadRecursive构造线索
// ---------- 2 打印线索树的首结点数据项 ----------
ThreadedNode<int>* root = inorder_threaded_tree.Root(); // 获取根结点
ThreadedNode<int>* first = inorder_threaded_tree.First(root); // 对根结点调用First()
cout << "中序线索第一个线索节点 :" << first->data << endl; // 打印首结点数据项
cout<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-获取子树最后一个线索节点**
* @note
* 测试-中序线索树-获取子树最后一个线索节点
* -----------------------------------
* -----------------------------------
*
* -----------------------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 打印线索树的最后的结点数据项**\n\n
* 获取根结点\n
* 对根结点调用Last()\n
* 打印最后的线索结点数据项\n
*
*
* -----------------------------------
*/
void TestInorderThreadedTreeLast() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedBinaryTree Last |"<<endl;
cout<<"| 测试-中序线索树-获取子树最后一个线索节点 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
InorderThreadedBinaryTree<int> inorder_threaded_tree; // 声明inorder_threaded_tree
int node_count = 7;
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i); // 插入整数0至6
}
inorder_threaded_tree.CreateThreadRecursive(); //调用CreateThreadRecursive构造线索
// ---------- 2 打印线索树的最后的结点数据项 ----------
ThreadedNode<int>* root = inorder_threaded_tree.Root(); // 获取根结点
ThreadedNode<int>* last_node = inorder_threaded_tree.Last(root); // 对根结点调用Last()
cout << "中序线索最后一个线索节点: " << last_node->data << endl; // 打印最后的线索结点数据项
cout<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-下一个线索结点**
* @note
* 测试-中序线索树-下一个线索结点
* -------------------------
* -------------------------
*
* -------------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 打印线索树的前4个结点的数据项**\n\n
* 按线索顺序获取7个结点\n
* 打印7个线索结点的数据项\n
*
*
* -------------------------
*/
void TestInorderThreadedTreeNext() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedBinaryTree Next |"<<endl;
cout<<"| 测试-中序线索树-下一个线索节点 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
// 插入整数0至6
int node_count = 7;
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 打印线索树的前4个结点的数据项 ----------
// 按线索顺序获取7个结点
ThreadedNode<int>* first = inorder_threaded_tree.First(inorder_threaded_tree.Root());
ThreadedNode<int>* second = inorder_threaded_tree.Next(first);
ThreadedNode<int>* third = inorder_threaded_tree.Next(second);
ThreadedNode<int>* forth = inorder_threaded_tree.Next(third);
ThreadedNode<int>* fifth = inorder_threaded_tree.Next(forth);
ThreadedNode<int>* sixth = inorder_threaded_tree.Next(fifth);
ThreadedNode<int>* seventh = inorder_threaded_tree.Next(sixth);
// 打印7个线索结点的数据项
cout << "中序线索树第1个线索节点: " << first->data << endl;
cout << "中序线索树第2个线索节点: " << second->data << endl;
cout << "中序线索树第3个线索节点: " << third->data << endl;
cout << "中序线索树第4个线索节点: " << forth->data << endl;
cout << "中序线索树第5个线索节点: " << fifth->data << endl;
cout << "中序线索树第6个线索节点: " << sixth->data << endl;
cout << "中序线索树第7个线索节点: " << seventh->data << endl;
cout<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-前一个线索节点**
* @note
* 测试-中序线索树-前一个线索节点
* -------------------------
* -------------------------
*
* -------------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 测试Pre函数**\n\n
* 声明nodes(结点数组, 长度4)\n
* nodes[0]取线索树首个线索结点\n
* nodes[1]至nodes[3]依次取后序结点\n
* 检测Pre函数\n
*/
void TestInorderThreadedTreePre() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedBinaryTree Pre |"<<endl;
cout<<"| 测试-中序线索树-前一个线索节点 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
int node_count = 7;
// 插入整数0至6
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 测试Pre函数 ----------
// 声明nodes(结点数组, 长度4)
ThreadedNode<int>* nodes[4];
// nodes[0]取线索树首个线索结点
nodes[0] = inorder_threaded_tree.First(inorder_threaded_tree.Root());
// nodes[1]至nodes[3]依次取后序结点
for (int i = 1; i < 4; i++) {
nodes[i] = inorder_threaded_tree.Next(nodes[i - 1]);
}
// 检测Pre函数
for (int i = 3; i >=1; i--) {
ThreadedNode<int>* pre_node = inorder_threaded_tree.Pre(nodes[i]);
cout << "中序线索树第" << i << "个线索节点: " << pre_node->data << endl;
}
cout<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-父节点**
* @note
* 测试-中序线索树-父节点
* ------------------
* ------------------
*
* ------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 检测Parent函数**\n\n
* 取根结点, 结点2, 结点4, 根结点的父节点\n
* 取结点6, 结点3, 结点1, 结点5, 结点5的父节点, 结点4的父节点, 结点2的父节点\n
* 打印相关结点信息\n
*/
void TestInorderThreadedTreeParent() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedBinaryTree Parent |"<<endl;
cout<<"| 测试-中序线索树-父节点 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
int node_count = 7;
// 插入整数0至6
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 检测Parent函数 ----------
// 取根结点, 结点2, 结点4, 根结点的父节点
ThreadedNode<int>* root = inorder_threaded_tree.Root();
ThreadedNode<int>* node_2 = root->right_child;
ThreadedNode<int>* node_4 = node_2->left_child;
ThreadedNode<int>* root_parent = inorder_threaded_tree.Parent(root);
// 取结点6, 结点3, 结点1, 结点5, 结点5的父节点, 结点4的父节点, 结点2的父节点
ThreadedNode<int>* node_6 = inorder_threaded_tree.First(root);
ThreadedNode<int>* node_3 = inorder_threaded_tree.Parent(node_6);
ThreadedNode<int>* node_1 = inorder_threaded_tree.Parent(node_3);
ThreadedNode<int>* node_5 = node_1->right_child;
ThreadedNode<int>* node_5_parent = inorder_threaded_tree.Parent(node_5);
ThreadedNode<int>* node_4_parent = inorder_threaded_tree.Parent(node_4);
ThreadedNode<int>* node_2_parent = inorder_threaded_tree.Parent(node_2);
// 打印相关结点信息
if (root_parent != nullptr) {
cout << "根节点的父节点: " << root_parent->data << endl;
} else {
cout<<"根节点的父节点为NULL"<<endl;
}
cout << "结点6的父结点: " << node_3->data << endl;
cout << "结点3的父结点: " << node_1->data << endl;
cout << "结点5的父结点: " << node_5_parent->data << endl;
cout << "结点4的父结点: " << node_4_parent->data << endl;
cout << "结点2的父结点: " << node_2_parent->data << endl;
cout << endl << "------------------------- CyberDash -------------------------" << endl << endl;
}
/*!
* @brief **测试-中序线索树-中序遍历**
* @note
* 测试-中序线索树-中序遍历
* --------------------
* --------------------
*
* --------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 中序遍历**\n\n
* 调用InorderTraverse\n
*
*
* --------------------
*/
void TestInorderThreadedTreeInorderTraverse() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedTree InorderTraverse |"<<endl;
cout<<"| 测试-中序线索树-中序遍历 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
int node_count = 7;
// 插入整数0至6
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 中序遍历 ----------
cout<<"中序线索树, 中序遍历: "<<endl;
inorder_threaded_tree.InorderTraverse(visit); // 调用InorderTraverse
cout<<endl<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-前序遍历**
* @note
* 测试-中序线索树-前序遍历
* --------------------
* --------------------
*
* --------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 前序遍历**\n\n
* 调用PreorderTraverse\n
*
*
* --------------------
*/
void TestInorderThreadedTreePreorderTraverse() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedTree PreorderTraverse |"<<endl;
cout<<"| 测试-中序线索树-前序遍历 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
int node_count = 7;
// 插入整数0至6
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 前序遍历 ----------
cout<<"中序线索树, 前序遍历: "<<endl;
inorder_threaded_tree.PreorderTraverse(visit); // 调用PreorderTraverse
cout<<endl<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
/*!
* @brief **测试-中序线索树-后序遍历**
* @note
* 测试-中序线索树-后序遍历
* --------------------
* --------------------
*
* --------------------
* + **1 构造线索树**\n\n
* 声明inorder_threaded_tree\n
* 插入整数0至6\n
* 调用CreateThreadRecursive构造线索\n\n
* + **2 后序遍历**\n\n
* 调用PostorderTraverse\n
*
*
* --------------------
*/
void TestInorderThreadedTreePostorderTraverse() {
cout<<endl;
cout<<"|------------------------ CyberDash ------------------------|"<<endl;
cout<<"| Test InorderThreadedTree PostorderTraverse |"<<endl;
cout<<"| 测试-中序线索树-后序遍历 |"<<endl;
cout<<"| |"<<endl;
cout<<"| 0 |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| / \\ |"<<endl;
cout<<"| 1 2 |"<<endl;
cout<<"| / \\ / |"<<endl;
cout<<"| 3 5 4 |"<<endl;
cout<<"| / |"<<endl;
cout<<"| 6 |"<<endl<<endl;
// ---------- 1 构造线索树 ----------
// 声明inorder_threaded_tree
InorderThreadedBinaryTree<int> inorder_threaded_tree;
int node_count = 7;
// 插入整数0至6
for (int i = 0 ; i < node_count; i++) {
inorder_threaded_tree.InsertRecursive(i);
}
// 调用CreateThreadRecursive构造线索
inorder_threaded_tree.CreateThreadRecursive();
// ---------- 2 后序遍历 ----------
cout<<"中序线索树, 后序遍历: "<<endl;
inorder_threaded_tree.PostorderTraverse(visit); // 调用PostorderTraverse
cout<<endl<<endl<<"------------------------- CyberDash -------------------------"<<endl;
cout<<endl;
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/giserDev/data-structures-cpp.git
git@gitee.com:giserDev/data-structures-cpp.git
giserDev
data-structures-cpp
数据结构(C++模板实现)
master

搜索帮助