数据结构实验:二叉树的应用
时间:2019-11-07
本文章向大家介绍数据结构实验:二叉树的应用,主要包括数据结构实验:二叉树的应用使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
typedef struct treepoint* tNode;
typedef struct queue* qNode;
typedef struct stack* sNode;
struct treepoint {
char date;
tNode lson, rson;
};
char s[110];
int pos;
tNode build() {//建立二叉树
tNode bt = (tNode)malloc(sizeof(treepoint));
pos++;
if (s[pos] == '#')bt = NULL;
else {
bt->date = s[pos];
bt->lson = build();
bt->rson = build();
}
return bt;
}
void pre_order_travel(tNode bt) {//前序遍历
printf("%c", bt->date);
if (bt->lson != NULL)
pre_order_travel(bt->lson);
if (bt->rson != NULL)
pre_order_travel(bt->rson);
//free(bt);
}
void mid_order_travel(tNode bt) {//中序遍历
if (bt->lson != NULL)
mid_order_travel(bt->lson);
printf("%c", bt->date);
if (bt->rson != NULL)
mid_order_travel(bt->rson);
//free(bt);
}
void post_order_travel(tNode bt) {//后序遍历
if (bt->lson != NULL)
post_order_travel(bt->lson);
if (bt->rson != NULL)
post_order_travel(bt->rson);
printf("%c", bt->date);
//free(bt);
}
struct stack {
tNode value;
sNode next;
};
sNode top;
void Stack_creat() {
top = (sNode)malloc(sizeof(stack));
top->next = NULL;
}
void Stack_push(tNode item) {
sNode temp = (sNode)malloc(sizeof(stack));
temp->next = top->next;
temp->value = item;
top->next = temp;
}
bool Stack_empty() {
return top->next == NULL;
}
void Stack_pop() {
sNode temp = top->next;
top->next = temp->next;
}
void iter_Inorder(tNode root) {//非递归遍历二叉树
Stack_creat();
if (root != NULL) {
Stack_push(root);
}
while (!Stack_empty()) {
sNode temp = top->next;
cout << temp->value->date;
Stack_pop();
if (temp->value->rson) {
Stack_push(temp->value->rson);
}
if (temp->value->lson) {
Stack_push(temp->value->lson);
}
}
cout << endl;
}
qNode front, rear;
struct queue {
tNode value;
qNode next;
};
void Queue_creat() {
front = (qNode)malloc(sizeof(queue));
rear = (qNode)malloc(sizeof(queue));
front->next = rear;
}
bool Queue_empty() {
return front->next == rear;
}
void Queue_delete() {
qNode temp = front->next;
front->next = temp->next;
}
void Queue_push(tNode item) {
qNode temp = (qNode)malloc(sizeof(queue));
rear->value = item;
rear->next = temp;
temp->next = NULL;
rear = temp;
}
void level_order(tNode root) {//二叉树的层序遍历
if (root == NULL) {
cout << endl;
}
Queue_creat();
Queue_push(root);
while (!Queue_empty()) {
qNode temp = front->next;
Queue_delete();
cout << temp->value->date;
if (temp->value->lson != NULL) {
Queue_push(temp->value->lson);
}
if (temp->value->rson != NULL) {
Queue_push(temp->value->rson);
}
}
cout << endl;
}
int leaf(tNode bt) {//计算叶子节点数量
int flag = 0;
int cnt = 0;
if (bt->lson != NULL)
cnt += leaf(bt->lson);
else
flag++;
if (bt->rson != NULL)
cnt += leaf(bt->rson);
else
flag++;
if (flag == 2)
cnt = 1;
return cnt;
}
int maxheight = 0;
void height(tNode bt, int now) {//计算树的深度
if (now > maxheight)maxheight = now;
if (bt->lson != NULL)
height(bt->lson, now + 1);
if (bt->rson != NULL)
height(bt->rson, now + 1);
}
int main() {
while (~scanf("%s", s + 1)) {
pos = 0;
tNode root = build();
cout << "先序遍历: ";
pre_order_travel(root); cout << endl;
cout << "中序遍历: ";
mid_order_travel(root); cout << endl;
cout << "后序遍历: ";
post_order_travel(root); cout << endl;
cout << "二叉树的非递归遍历: ";
iter_Inorder(root);
cout << "二叉树的层序遍历: ";
level_order(root);
printf("叶子结点数: %d\n", leaf(root));
maxheight = 0;
height(root, 1);
printf("树的深度为: %d\n", maxheight);
}
}
原文地址:https://www.cnblogs.com/fengfeng007/p/11813407.html
- 100个Numpy练习【3】
- 100个Numpy练习【4】
- Golang语言中Path包用法
- 100个Numpy练习【5】
- Golang中container/list包中的坑
- 关于Golang语言数组索引的有趣现象
- 使用SQL来分析数据库参数(二)(r10笔记第82天)
- Golang不定参数
- [go语言]利用缓冲信道来实现网游帐号验证消息的分发和等待
- 转--Golang语言版 ssh口令破解工具
- cubieboard(树莓派)安装Ubuntu+Apache+PHP+Mysql
- Oracle 12c里的几点补充(一)(r11笔记第7天)
- Oracle备库的PDB无法连接的问题(r11笔记第6天)
- Golang语言社区--模板的使用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈keras中的后端backend及其相关函数(K.prod,K.cast)
- 使用 prometheus python 库编写自定义指标的方法(完整代码)
- PHP PDOStatement::fetchColumn讲解
- PHP PDOStatement::bindValue讲解
- PDO::lastInsertId讲解
- thinkPHP框架RBAC实现原理分析
- PHP PDOStatement::debugDumpParams讲解
- PDO::prepare讲解
- sklearn的predict_proba使用说明
- 如何使用python记录室友的抖音在线时间
- 使用keras实现BiLSTM+CNN+CRF文字标记NER
- 图解MyBatis的SQL执行流程
- Keras: model实现固定部分layer,训练部分layer操作
- 在Keras中CNN联合LSTM进行分类实例
- DeepWalk:图网络与NLP的巧妙融合