数据结构试验四
2015-11-12 12:40
591 查看
一、实验目的
巩固树和二叉树的相关知识,特别是二叉树的相关内容。学会运用灵活应用。1.回树和二叉树的逻辑结构和存储方法,清楚掌握树和二叉树的遍历操作。
2.学习树的相关知识来解决实际问题。
3.进一步巩固程序调试方法。
4.进一步巩固模板程序设计。
二、实验内容
1.自己设计一个二叉树,深度最少为4,请递归算法分别用前序、中序、后序遍历输出树节点。源代码如下:
头文件tree.h
#ifndef tree_H #define tree_H struct node { char data; node*lchild, *rchild; }; class tree { public: tree(){ root = creat(root); } ~tree(){ release(root); } void preorder(){ preorder(root); } void inorder(){ inorder(root); } void postorder(){postorder(root);} void leverorder(){ leverorder(root); } private: node*root,*d; int rear, front; node* c[100000]; node*creat(node*a); void release(node*a); void preorder(node*a); void inorder(node*a); void postorder(node*a); void leverorder(node*a); }; #endif
源文件tree.cpp
#include<iostream> using namespace std; #include"tree.h" node*tree::creat(node*a) { char b; cout << "请输入创建一棵二叉树的节点数据" << endl; cin >> b; if (b == '#')return NULL; else { a = new node; a->data = b; a->lchild = creat(a->lchild); a->rchild = creat(a->rchild); } return a; } void tree::release(node*a) { if (a != NULL) { release(a->lchild); release(a->rchild); delete a; } } void tree::preorder(node*a) { if (a ==NULL)return; else{ cout << a->data<<" "; preorder(a->lchild); preorder(a->rchild); } } void tree::inorder(node*a) { if (a ==NULL)return; else{ preorder(a->lchild); cout << a->data << " "; preorder(a->rchild); } } void tree::postorder(node*a) { if (a == NULL)return; else{ postorder(a->lchild); postorder(a->rchild); cout << a->data << " "; } } void tree::leverorder(node*a) { rear = front = -1; if (root == NULL)return; c[++rear] = root; while (rear != front) { d = c[++front]; cout << d->data << " "; if (d->lchild != NULL)c[++rear] = d->lchild; if (d->rchild != NULL)c[++rear] = d->rchild; } }
源文件main.cpp
#include<iostream> using namespace std; #include "tree.h" int main() { tree t; cout << "前序遍历:" << endl; t.preorder(); cout << endl; cout << "中序遍历:" << endl; t.inorder(); cout << endl; cout << "后序遍历:" << endl; t.postorder(); cout << endl; cout << "层序遍历:" << endl; t.leverorder(); cout << endl; system("pause"); return 0; }
运行效果如下:
三、总结
相关文章推荐
- AVL树-自平衡二叉查找树(Java实现)
- Lua教程(七):数据结构详解
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- C#数据结构揭秘一
- 数据结构之Treap详解
- C语言二叉树的非递归遍历实例分析
- 使用C语言构建基本的二叉树数据结构
- C++非递归队列实现二叉树的广度优先遍历
- C#使用前序遍历、中序遍历和后序遍历打印二叉树的方法
- JavaScript数据结构和算法之图和图算法
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- Java数据结构及算法实例:插入排序 Insertion Sort
- Java数据结构及算法实例:考拉兹猜想 Collatz Conjecture
- java数据结构之java实现栈
- java数据结构之实现双向链表的示例
- Java数据结构及算法实例:选择排序 Selection Sort
- Java数据结构及算法实例:朴素字符匹配 Brute Force
- Java数据结构及算法实例:汉诺塔问题 Hanoi
- Java数据结构及算法实例:快速计算二进制数中1的个数(Fast Bit Counting)
- java数据结构和算法学习之汉诺塔示例