目录

  • 前言
  • 一、题目
    • 1.二叉树的各种遍历过程及遍历算法设计。
    • 2.实现二叉树各种遍历算法
  • 总结

前言

提示:记得关注我哦!!!

一、题目

1.二叉树的各种遍历过程及遍历算法设计。

(1) 先序遍历二叉树;
(2) 中序遍历二叉树;
(3)后序遍历二叉树。

2.实现二叉树各种遍历算法

代码如下(示例):

#include<stdio.h>
#include<malloc.h>
#define MaxSize 100
typedef char ElemType;
typedef struct node
{ElemType data;struct node *lchild;struct node *rchild;}BTNode;
void CreateBTree(BTNode *&b,char *str)
{BTNode * St[MaxSize],*p;int top=-1,k,j=0;char ch;b=NULL;ch=str[j];while(ch!='\0'){switch(ch){case'(':top++;St[top]=p;k=1;break;case')':top--;break;case',':k=2;break;default:p=(BTNode *)malloc(sizeof(BTNode));p->data=ch;p->lchild=p->rchild=NULL;if(b==NULL)b=p;else{switch(k){case 1:St[top]->lchild=p;break;case 2:St[top]->rchild=p;break;}}}j++;ch=str[j];}
}
void DestroyBTree(BTNode *&b)
{if(b!=NULL){DestroyBTree(b->lchild);DestroyBTree(b->rchild);free(b);}
}
BTNode *FindNode(BTNode *b,ElemType x)
{BTNode *p;if(b==NULL)return NULL;else if(b->data==x)return b;else{p=FindNode(b->lchild,x);if(p!=NULL)return p;elsereturn FindNode(b->rchild,x);}
}
BTNode *LchildNode(BTNode *p)
{return p->lchild;}
BTNode *RchildNode(BTNode *p)
{return p->rchild;
}
int BTHeight(BTNode *b)
{int lchildh,rchildh;if(b==NULL)return(0);else{lchildh=BTHeight(b->lchild);rchildh=BTHeight(b->rchild);return(lchildh>rchildh)?(lchildh+1):(rchildh+1);}
}
void DispBTree(BTNode *b)
{if(b!=NULL){printf("%c",b->data);if(b->lchild!=NULL||b->rchild!=NULL){printf("(");DispBTree(b->lchild);if(b->rchild!=NULL)printf(",");DispBTree(b->rchild);printf(")");}}
}#include"btree.cpp"
void PreOrder(BTNode *b)
{if(b!=NULL){printf("%c",b->data);PreOrder(b->lchild);PreOrder(b->rchild);}
}
void PreOrderl(BTNode *b)
{BTNode *St[MaxSize],*p;int top = -1;if(b!=NULL){top++;St[top]=b;while(top>-1){p=St[top];top--;printf("%c",p->data);if(p->rchild!=NULL){top++;St[top]=p->rchild;}if(p->lchild!=NULL){top++;St[top]=p->lchild;}}printf("\n");}
}
void InOrder(BTNode *b)
{if(b!=NULL){InOrder(b->lchild);printf("%c",b->data);InOrder(b->rchild);}}
void InOrderl(BTNode *b)
{BTNode *St[MaxSize],*p;int top = -1;if(b!=NULL){p=b;while(top>-1 || p!=NULL){while(p!=NULL){top++;St[top]=p;p=p->lchild;}if(top>-1){p=St[top];top--;printf("%c",p->data);p=p->rchild;}}printf("\n");}
}
void PostOrder(BTNode *b)
{if(b!=NULL){PostOrder(b->lchild);PostOrder(b->rchild);printf("%c",b->data);}
}void PostOrderl(BTNode *b)
{BTNode *St[MaxSize],*p;int top = -1;bool flag;if(b!=NULL){do{    while(b!=NULL){ top++;St[top]=p;b=b->lchild;}p=NULL;flag=true;while(top!=-1&&flag){b=St[top];if(b->rchild==p){printf("%c",b->data);top--;p=b;}else{b=b->rchild;flag=false;}}}while(top!=-1);printf("\n");}
}
void TravLevel(BTNode *b)
{BTNode *Qu[MaxSize];int front,rear;front = rear=0;if(b!=NULL)printf("%c",b->data);rear++;Qu[rear]=b;while(rear!=front){front=(front+1)%MaxSize;b=Qu[front];if(b->lchild!=NULL){printf("%c",b->lchild->data);rear=(rear+1)%MaxSize;Qu[rear]=b->lchild;}if(b->rchild!=NULL){printf("%c",b->rchild->data);rear=(rear+1)%MaxSize;Qu[rear]=b->rchild;}}printf("\n");}
int main()
{BTNode *b;CreateBTree(b,"A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))");printf("二叉树b:");DispBTree(b);printf("\n");printf("层次遍历序列:");TravLevel(b);printf("先序遍历序列:\n");printf("   递归算法:");PreOrder(b);printf("\n");printf(" 非递归算法:");PreOrder(b);printf("\n");printf("中序遍历序列:\n");printf("   递归算法:");InOrder(b);printf("\n");printf(" 非递归算法:");InOrder(b);printf("\n");printf("后序遍历序列:\n");printf("   递归算法:");PostOrder(b);printf("\n");printf(" 非递归算法:");PostOrder(b);printf("\n");DestroyBTree(b);return 1;
}

总结

我是不会飞的飞鸟,肝文不易,如果本次文章对你有帮助点赞关注支持一下,谢谢!

实现二叉树各种遍历算法相关推荐

  1. 【swjtu】数据结构实验6_二叉树的遍历算法

    实验内容及要求: 编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序.中序.后序以及层次遍历结点访问次序.其中层次遍历的实现需使用循环队列.二叉树结点数据类型建议选用字符类型. 实 ...

  2. 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法

    重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...

  3. 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)

    二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...

  4. html二叉树遍历,二叉树的遍历算法

    二叉树的遍历算法 概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了.很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的.比如要你找到树中满足条件 ...

  5. 二叉树的遍历算法(三级)

    知道二叉树在计算机里面是怎么存储的,有顺序存储结构,采用数组存储,也有链式存储结构,采用二叉链表,或者采用三叉链表,那采用链式存储结构更多一点,下面我们会讲二叉树在计算机里的实现,就是链式存储结构的二 ...

  6. 二叉树的遍历算法(一 递归算法)

    > 引言 通过递归的方式,实现遍历每一个元素的目的. 该算法分成三种除访问节点时机不同外,其他完全相同(访问路径完全相同)的算法(稍后作解释).分别为先序遍历(DLR),中序遍历(LDR),后序 ...

  7. Python实现: 常用排序算法 二叉树的遍历算法

    转载自:http://www.cnblogs.com/alex3714/articles/5474411.html点击打开链接,感谢原作者,如有侵权,联系删除 本节内容 算法定义 时间复杂度 空间复杂 ...

  8. 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...

    二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...

  9. 树:二叉树的层序遍历算法(超简洁实现及详细分析)

    实现思路 我们来看看下图的二叉链表 如何实现层序遍历. 层序遍历顺序:ABECDG A为B.E的双亲结点,遍历顺序是 根->左->右 是不是. 而且每个结点都是这样的遍历顺序 有木有.那么 ...

  10. 数据结构(二十)二叉树的递归遍历算法

    一.二叉树的遍历的定义 1.二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问依次且仅被访问依次.树的结点之间不存在 ...

最新文章

  1. Unet实现图像分割(三)
  2. 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
  3. 支持向量机:Outliers
  4. Android传感器编程带实例
  5. java读取excel数据_Java读取Excel内容(转)
  6. [leetcode] 154.寻找旋转排序数组中的最小值 II
  7. SVD(奇异值分解)Python实现
  8. Java基础语法之Map
  9. 深度学习auc_机器学习集成学习与模型融合!
  10. html标签之常用标签
  11. 十大硬盘数据恢复软件
  12. Python—基础知识之总结(6)
  13. vx开发|JSON配置文件
  14. Stream编程之Collectors.joining方法解析
  15. 什么是Mixin?带你了解Vue中的Mixin混入
  16. 腾讯云部署Hebe节点教程
  17. PMP考试冲刺敏捷专题
  18. 阿里云视频云视频增强领域最新研究成果入选国际顶级学术会议
  19. SQL中DQL、DML、DPL、DCL、DDL、CCL的概念与区别
  20. php简易留言板功能,简单实现PHP留言板功能

热门文章

  1. PHP亿乐社区源码一比一高仿全开源源码
  2. minst 手写数字识别实战
  3. canvas应用之各种游戏转盘
  4. ztree的select设置,完笔
  5. SQL Serever学习教程
  6. java软考 试题_软考程序员下午考试试题练习
  7. 思科、华为、Dell visio图下载
  8. 手机数控模拟器安卓版_手机cnc加工模拟器中文版下载-cnc加工模拟器手机版 1.1.4 安卓版-玩友游戏网...
  9. Java与模式.pdf
  10. C/C++网络编程详解(Windows版)