实现二叉树各种遍历算法
目录
- 前言
- 一、题目
- 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;
}
总结
我是不会飞的飞鸟,肝文不易,如果本次文章对你有帮助点赞关注支持一下,谢谢!
实现二叉树各种遍历算法相关推荐
- 【swjtu】数据结构实验6_二叉树的遍历算法
实验内容及要求: 编写程序,用先序递归遍历法建立二叉树的二叉链表存储结构,然后输出其先序.中序.后序以及层次遍历结点访问次序.其中层次遍历的实现需使用循环队列.二叉树结点数据类型建议选用字符类型. 实 ...
- 重拾算法(3)——用458329个测试用例全面测试二叉树和线索二叉树的遍历算法
重拾算法(3)--用458329个测试用例全面测试二叉树和线索二叉树的遍历算法 在"上一篇"和"上上一篇"中,我给出了二叉树和线索二叉树的遍历算法.给出算法容易 ...
- 二叉树的遍历(算法导论第三版12.1-4)(包含先序遍历,后序遍历和中序遍历)
二叉树的遍历(算法导论第三版12.1-4) 1⃣️先序遍历 template<typename T> void preorder_tree_wald(BinaryTreeNode<T ...
- html二叉树遍历,二叉树的遍历算法
二叉树的遍历算法 概述 二叉树作为一个基础的数据结构,遍历算法作为一个基础的算法,两者结合当然是经典的组合了.很多题目都会有 ta 的身影,有直接问二叉树的遍历的,有间接问的.比如要你找到树中满足条件 ...
- 二叉树的遍历算法(三级)
知道二叉树在计算机里面是怎么存储的,有顺序存储结构,采用数组存储,也有链式存储结构,采用二叉链表,或者采用三叉链表,那采用链式存储结构更多一点,下面我们会讲二叉树在计算机里的实现,就是链式存储结构的二 ...
- 二叉树的遍历算法(一 递归算法)
> 引言 通过递归的方式,实现遍历每一个元素的目的. 该算法分成三种除访问节点时机不同外,其他完全相同(访问路径完全相同)的算法(稍后作解释).分别为先序遍历(DLR),中序遍历(LDR),后序 ...
- Python实现: 常用排序算法 二叉树的遍历算法
转载自:http://www.cnblogs.com/alex3714/articles/5474411.html点击打开链接,感谢原作者,如有侵权,联系删除 本节内容 算法定义 时间复杂度 空间复杂 ...
- 二叉树层次遍历算法 python_二叉树的遍历详解:前、中、后、层次遍历(Python实现)...
二叉树的遍历详解:前.中.后.层次遍历(Python实现) 二叉树是一种常见的数据结构,而它的常见遍历方法有前序遍历.中序遍历.后续遍历.层次遍历--掌握这几种遍历方法是很有必要的. 假设我们二叉树节 ...
- 树:二叉树的层序遍历算法(超简洁实现及详细分析)
实现思路 我们来看看下图的二叉链表 如何实现层序遍历. 层序遍历顺序:ABECDG A为B.E的双亲结点,遍历顺序是 根->左->右 是不是. 而且每个结点都是这样的遍历顺序 有木有.那么 ...
- 数据结构(二十)二叉树的递归遍历算法
一.二叉树的遍历的定义 1.二叉树的遍历(traversing binary tree)是指从根结点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问依次且仅被访问依次.树的结点之间不存在 ...
最新文章
- Unet实现图像分割(三)
- 不懂编程可以自学python吗-我不会编程,也可能学会Python吗?
- 支持向量机:Outliers
- Android传感器编程带实例
- java读取excel数据_Java读取Excel内容(转)
- [leetcode] 154.寻找旋转排序数组中的最小值 II
- SVD(奇异值分解)Python实现
- Java基础语法之Map
- 深度学习auc_机器学习集成学习与模型融合!
- html标签之常用标签
- 十大硬盘数据恢复软件
- Python—基础知识之总结(6)
- vx开发|JSON配置文件
- Stream编程之Collectors.joining方法解析
- 什么是Mixin?带你了解Vue中的Mixin混入
- 腾讯云部署Hebe节点教程
- PMP考试冲刺敏捷专题
- 阿里云视频云视频增强领域最新研究成果入选国际顶级学术会议
- SQL中DQL、DML、DPL、DCL、DDL、CCL的概念与区别
- php简易留言板功能,简单实现PHP留言板功能