C实现前序遍历二叉树
1. 实验目的
(1)掌握二叉树的逻辑结构;
(2)掌握二叉树的二叉链表存储结构;
(3)验证二叉树的二叉链表存储及遍历操作。
2. 实验目的
(1)建立一棵含有n个结点的二叉树,采用二叉链表存储;
(2)输出前序遍历该二叉树的遍历结果。
3. 实验提示
定义二叉树的数据类型——二叉树结点结构体BiNode,在BiNode基础上实现题目要求的建立二叉链表、前序遍历等基本操作。建立二叉链表可以采用扩展二叉树的一个遍历序列,例如前序序列,将扩展二叉树的前序序列由键盘输入,建立该二叉树的二叉链表存储。
简单起见,本实验假定二叉树的数据元素为char型,要求学生:
(1)将实验程序调试通过后,用模板类改写;
(2)加入层序遍历二叉树等基本操作。
4. 程序代码
#include<stdlib.h>
#include<stdio.h>typedef char ElemType;//二叉树的二叉链表结构,也就是二叉树的存储结构,1个数据域,2个指针域(分别指向左右孩子)typedef struct BiTNode
{ElemType data;struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;//二叉树的建立,按前序遍历的方式建立二叉树,当然也可以以中序或后序的方式建立二叉树
void CreateBiTree(BiTree *T)
{ElemType ch;scanf_s("%c",&ch);if (ch == '#')*T = NULL; //保证是叶结点else{*T = (BiTree)malloc(sizeof(BiTNode));//if (!*T)//exit(OVERFLOW); //内存分配失败则退出。(*T)->data = ch;//生成结点CreateBiTree(&(*T)->lchild);//构造左子树CreateBiTree(&(*T)->rchild);//构造右子树 }
}
//表示对遍历到的结点数据进行的处理操作,此处操作是将树结点前序遍历输出
void operation1(ElemType ch)
{printf("%c\n",ch);
}
//此处在输出的基础上,并输出层数
void operation2(ElemType ch, int level)
{printf("%c在第%d层\n",ch,level);
}
//递归方式前序遍历二叉树
void PreOrderTraverse(BiTree T, int level)
{if (T == NULL)return;/*此处表示对遍历的树结点进行的操作,根据你自己的要求进行操作,这里只是输出了结点的数据*///operation1(T->data);operation2(T->data, level); //输出了层数PreOrderTraverse(T->lchild, level + 1);PreOrderTraverse(T->rchild, level + 1);
}//递归方式中序遍历二叉树void InOrderTraverse(BiTree T, int level)
{if (T == NULL)return;InOrderTraverse(T->lchild, level + 1);//operation1(T->data);operation2(T->data, level); //输出了层数InOrderTraverse(T->rchild, level + 1);
}//递归方式后序遍历二叉树void PostOrderTraverse(BiTree T, int level)
{if (T == NULL)return;PostOrderTraverse(T->lchild, level + 1);PostOrderTraverse(T->rchild, level + 1);//operation1(T->data);operation2(T->data, level); //输出了层数
}int main()
{int level = 1; //表示层数BiTree T = NULL;printf("请以前序遍历的方式输入扩展二叉树:"); //类似输入AB#D##C##CreateBiTree(&T);// 建立二叉树,没有树,怎么遍历printf("递归前序遍历输出为:\n");PreOrderTraverse(T, level);//进行前序遍历,其中operation1()和operation2()函数表示对遍历的结点数据进行的处理操作printf("\n");printf("递归中序遍历输出为:\n");InOrderTraverse(T, level);printf("\n");printf("递归后序遍历输出为:\n");PostOrderTraverse(T, level);printf("\n");system("pause");return 0;
}
5. 运行结果
6. 实验心得
通过这次实验,我对前序、中序、后续遍历二叉树有了更深的理解,我充分掌握了了递归算法的运行过程与实现,掌握了常用递归算法的算法思想与使用,更全面的认识了计算机中程序运行的过程。
C实现前序遍历二叉树相关推荐
- 前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...
二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode ...
- python非递归前序遍历二叉树_LintCode66:二叉树的前序遍历(python)
66. 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 样例 1: 输入:{1,2,3} 输出:[1,2,3] 解释: 1 / \ 2 3 它将被序列化为{1,2,3} 前序遍历 样 ...
- python非递归前序遍历二叉树_Python非递归实现二叉树的后续遍历
leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存 ...
- 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历
二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...
- 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树
import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...
- 中序建立二叉树,非递归前序遍历二叉树
内容: 编写程序,实现下述功能,并上机调试通过. 按中序顺序建立一棵二叉树: 用非递归方式遍历二叉树(先序),输出遍历序列. 步骤: 算法分析 采用二叉链表做存储结构,建立二叉树,借助于栈结构来实现二 ...
- 二叉树的创建、前序遍历、中序遍历、后序遍历
二叉树的创建.前序遍历.中序遍历.后序遍历 // BTree.cpp : Defines the entry point for the console application. /* 作者:成晓旭 ...
- c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...
点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...
- 数据结构 | 第十一章:二叉树和其他树 | 【前序遍历】【中序遍历】【后序遍历】【层次遍历】 | 并查集
第5-10章:线性结构,元素之间存在线性次序(线性表.数组与矩阵.栈.队列.跳表和散列表 第11-15章:层次结构(二叉树和树.优先队列.竞赛树.搜索树) 文章目录 11.1 树 11.2 二叉树 1 ...
最新文章
- 安徽大学计算机科学与技术复试线,安徽大学计算机考研报录比及分数线
- 如何在matlab sfunction 函数中调用自己写的函数?
- Vue中bus的使用
- formdata接收数据怎么接收数组_LBT是什么?怎么增加通信可靠性?
- Android JSON数据与实体类之间的相互转化-------GSON的简单用法
- windows下用C/C++访问MySQL数据库
- Python模拟登陆,解密js代码实例:知乎登陆
- ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
- 我最喜欢的ORM工具—Simple Data(转)
- GPIO接口解析【转】
- IIS发布web网站
- 屏幕坐标转换成threejs的坐标
- 配置NodeJS免安装环境变量,win7,win10
- N点虚拟主机管理系统 企业版稳定亲测
- 新一代极米Z6X和极米Z6X哪个好
- xml与map的相互转换
- 按规定顺序输出26个字母
- 如何推广微信公众号(快速增加粉丝数量)?
- 僵尸进程(zombie process)
- Enable MMC3 interface On Am57xx
热门文章
- s:checkboxlist 选中
- UDT长度的含义是什么?
- 浅谈快件清关与邮关的区别
- Leetcode_116_Populating Next Right Pointers in Each Node
- f2fs系列文章fsck(五)
- JavaApplet运行
- 【AtCoder】AtCoder Grand Contest 045
- 力扣(LeetCode)159. 至多包含两个不同字符的最长子串(2022.06.08)
- 碰到spoolsv.exe-应用程序错误怎么办?
- Java 中j+=i 和 j=+i 的区别