首页 > 其他分享 >数据结构【完整代码】之(C语言实现【二叉树】创建、递归遍历(前序、中序、后序)、非递归先序遍历)

数据结构【完整代码】之(C语言实现【二叉树】创建、递归遍历(前序、中序、后序)、非递归先序遍历)

时间:2022-11-01 22:05:41浏览次数:48  
标签:lchild 遍历 递归 BiTree 前序 printf rchild NULL top


本文包含两个文件的代码和一张测试效果图:

  • BinaryTree.h文件: 用于存储信息:存放函数、结构体、栈的函数实现、变量名等
  • TreeTravel.cpp文件: 用于测试
  • 效果图:(位于最上方)

效果图:

数据结构【完整代码】之(C语言实现【二叉树】创建、递归遍历(前序、中序、后序)、非递归先序遍历)_数据结构


BinaryTree.h文件:

#include<stdio.h>
#include<stdlib.h>

#define MAX_TRUE_SIZE 100
#define OK 1
#define ERROR 0

typedef int Status;
typedef char TElemType; //树结点的数据类型

typedef struct BiTNode{
TElemType data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;

Status CreateBiTree(BiTree *T){
TElemType ch;
scanf("%c", &ch);
if(ch == '#'){
*T = NULL;
}
else{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T){
return ERROR;
}
(*T)->data = ch;
CreateBiTree(&(*T)->lchild);
CreateBiTree(&(*T)->rchild);
}
return OK;
}

void PreOrderTraverse(BiTree T){
if(T == NULL){
return;
}
printf("%c", T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}

void InOrderTraverse(BiTree T){
if(T == NULL){
return;
}
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}

void PostOrderTraverse(BiTree T){
if(T == NULL){
return;
}
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
printf("%c", T->data);
}

void PreOrder(BiTree T)
{
if(T == NULL){
return;
}
BiTree Seqstack[MAX_TRUE_SIZE];
int top = -1;
BiTree p;
top++;
Seqstack[top] = T; // 先将根结点压栈
while(top > -1) // 栈不为空时循环
{
p = Seqstack[top]; // 栈顶元素出栈
top--;
printf("%c", p->data); // 访问栈顶元素
if(p->rchild != NULL) // 如果右孩子不为空,则进栈
{
top++;
Seqstack[top] = p->rchild;
}
if(p->lchild != NULL) // 如果左孩子不为空,则进栈
{
top++;
Seqstack[top] = p->lchild;
}
}
}

TreeTravel.cpp文件:

#include "BinaryTree.h"

int main(){
BiTree Tree;
CreateBiTree(&Tree);
printf("前序遍历:");
PreOrderTraverse(Tree);
printf("\n");
printf("中序遍历:");
InOrderTraverse(Tree);
printf("\n");
printf("后序遍历:");
PostOrderTraverse(Tree);
printf("\n");
printf("非递归先序遍历:");
PreOrder(Tree);
printf("\n");
}


标签:lchild,遍历,递归,BiTree,前序,printf,rchild,NULL,top
From: https://blog.51cto.com/u_15856491/5815020

相关文章

  • 数据结构【完整代码】之(C语言实现【图的存储创建遍历】邻接矩阵与邻接表)
    零、编码前的准备1.构画草图:2.测试数据:邻接表的DFS与BFS测试数据:45ABCD0102031232邻接矩阵的DFS与BFS测试数据:45ABCD0150210031012153230一、邻接矩阵包含......
  • Python—循环遍历
    一、循环遍历遍历某个结构形成的循环运行方式for<循环变量>in<遍历结构>:<语句块>从遍历结构中逐一提取元素,放在循环变量中:由保留字for和in组成,完整遍历所......
  • js中递归函数
    一、什么是递归函数简单来说,递归函数就是一个函数直接或间接地调用自身,递归函数实现的基本思路1.设定好函数的功能(包括参数和返回值的设计),这是最关键的一环。......
  • cmd遍历文件之for
    最近想把某项目下的文件遍历执行,因为只执行固定格式的文件,比如node执行js文件,那么需要遍历所有js文件,所以想分两步走,第一步循环遍历所有js文件名称并写入txt文件中,第二步读......
  • 数据结构 玩转数据结构 5-4 链表的天然递归结构性质
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13440 1重点关注1.1代码草图 1.2递归和链表对比通过对比,递归要比链表......
  • LeetCode_144_二叉树的前序遍历
    题目描述:给定一个二叉树,返回它的前序遍历。示例:输入:[1,null,2,3]1\2/3输出:[1,2,3]进阶:递归算法很简单,你可以通过迭代算法完成吗?递归的写法......
  • 图的深度优先遍历DFS
    //邻接矩阵表示//实现图的深度优先遍历(DFS)constintmaxv=1000;//定义图中最大节点数constintINF=MAX_INT;intn;//输入节点数intG[maxv][maxv]={INF};boolvisited[ma......
  • 数据结构 玩转数据结构 5-3 递归基础与递归的宏观语意
    0课程地址https://coding.imooc.com/lesson/207.html#mid=13435 1重点关注1.1代码草图   1.2递归的宏观语义核心:把问题转......
  • 树的遍历时间复杂度
    树的遍历通常分为前序遍历、中序遍历、后序遍历、层序遍历四种情况。对于遍历方式只是打印顺序而已,所以四种遍历复杂度均相同。1.非递归遍历(辅助栈)时间复杂度:O(N)空间......
  • ABC 275 ABCD ( dfs / 递推递归+记忆化搜索)
    https://atcoder.jp/contests/abc275/tasksA-FindTakahashi题目大意:求数组最大值的数字下标。SampleInput13508070SampleOutput12#include<bits/st......