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实现前序遍历二叉树相关推荐

  1. 前序遍历二叉树代码_二叉树遍历、二叉树深度、代码示例,一点课堂(多岸学院)...

    二叉树的遍历 ★★★★★TreeNode 节点/ Definition for a binary tree node. /public class TreeNode {int val;TreeNode ...

  2. python非递归前序遍历二叉树_LintCode66:二叉树的前序遍历(python)

    66. 二叉树的前序遍历 给出一棵二叉树,返回其节点值的前序遍历. 样例 样例 1: 输入:{1,2,3} 输出:[1,2,3] 解释: 1 / \ 2 3 它将被序列化为{1,2,3} 前序遍历 样 ...

  3. python非递归前序遍历二叉树_Python非递归实现二叉树的后续遍历

    leetcode 145. Binary Tree Postorder Traversal 思路一: 使用一个栈stack保存经过的根结点,另一个栈flag保存每个结点的右子树是否遍历: 如果根结点存 ...

  4. 二叉树的前序遍历,二叉树的中序遍历,二叉树的后序遍历,二叉树的层序遍历

    二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode) (leetcode-cn.com) 给你二叉树的根节点 root ,返回它节点值的 前序 遍历. 示例 1: 输入:root ...

  5. 非递归前序遍历二叉树,非递归中序遍历二叉树,非递归后续遍历二叉树

    import java.util.Stack;public class Front {//非递归前序遍历public void front(TreeNode node) {Stack<TreeN ...

  6. 中序建立二叉树,非递归前序遍历二叉树

    内容: 编写程序,实现下述功能,并上机调试通过. 按中序顺序建立一棵二叉树: 用非递归方式遍历二叉树(先序),输出遍历序列. 步骤: 算法分析 采用二叉链表做存储结构,建立二叉树,借助于栈结构来实现二 ...

  7. 二叉树的创建、前序遍历、中序遍历、后序遍历

    二叉树的创建.前序遍历.中序遍历.后序遍历 // BTree.cpp : Defines the entry point for the console application. /*  作者:成晓旭 ...

  8. c++ 删除二叉树的子树_数据结构—树|二叉树|前序遍历、中序遍历、后序遍历【图解实现】...

    点击蓝字关注我们 AI研习图书馆,发现不一样的精彩世界 数据 结构 二叉树的遍历 一.树 在谈二叉树的知识点之前,我们首先来看一下树和图的基本概念.树:不包含回路的连通无向图,树是一种简单的非线性结构 ...

  9. 数据结构 | 第十一章:二叉树和其他树 | 【前序遍历】【中序遍历】【后序遍历】【层次遍历】 | 并查集

    第5-10章:线性结构,元素之间存在线性次序(线性表.数组与矩阵.栈.队列.跳表和散列表 第11-15章:层次结构(二叉树和树.优先队列.竞赛树.搜索树) 文章目录 11.1 树 11.2 二叉树 1 ...

最新文章

  1. 安徽大学计算机科学与技术复试线,安徽大学计算机考研报录比及分数线
  2. 如何在matlab sfunction 函数中调用自己写的函数?
  3. Vue中bus的使用
  4. formdata接收数据怎么接收数组_LBT是什么?怎么增加通信可靠性?
  5. Android JSON数据与实体类之间的相互转化-------GSON的简单用法
  6. windows下用C/C++访问MySQL数据库
  7. Python模拟登陆,解密js代码实例:知乎登陆
  8. ACM PKU 1019 Number Sequence http://acm.pku.edu.cn/JudgeOnline/problem?id=1019
  9. 我最喜欢的ORM工具—Simple Data(转)
  10. GPIO接口解析【转】
  11. IIS发布web网站
  12. 屏幕坐标转换成threejs的坐标
  13. 配置NodeJS免安装环境变量,win7,win10
  14. N点虚拟主机管理系统 企业版稳定亲测
  15. 新一代极米Z6X和极米Z6X哪个好
  16. xml与map的相互转换
  17. 按规定顺序输出26个字母
  18. 如何推广微信公众号(快速增加粉丝数量)?
  19. 僵尸进程(zombie process)
  20. Enable MMC3 interface On Am57xx

热门文章

  1. s:checkboxlist 选中
  2. UDT长度的含义是什么?
  3. 浅谈快件清关与邮关的区别
  4. Leetcode_116_Populating Next Right Pointers in Each Node
  5. f2fs系列文章fsck(五)
  6. JavaApplet运行
  7. 【AtCoder】AtCoder Grand Contest 045
  8. 力扣(LeetCode)159. 至多包含两个不同字符的最长子串(2022.06.08)
  9. 碰到spoolsv.exe-应用程序错误怎么办?
  10. Java 中j+=i 和 j=+i 的区别