数据结构——二叉树
来源:互联网 发布:我国的网络技术发展还 编辑:程序博客网 时间:2024/05/20 21:21
1.二叉树的遍历(traversing binary tree):
从根结点出发,按照某种次序依次访问各个结点,且每个结点有且仅被访问一次。
1)前序遍历:先访问各个根结点,顺序遍历左子树,再顺序遍历右子树。输出第一个为根节点。
2)中序遍历:从根节点开始,先遍历左子树,然后是遍历右子树,最后是节点;
3)后序遍历:先从左到右遍历叶子,然后到分支节点,最后是根节点。
2二叉树的建立
叶子的指针域是指向NULL的,但在建立二叉树时,需要判断该节点是否有左右孩子节点,因此将叶子结点的lchild和rchild指针指向一个虚拟的节点,并赋予特定的值来表示结束,以便于插入新的结点。
#include<stdio.h>#include<stdlib.h>#define endmark 1000//定义叶子的结束标志typedef int Elemtype ;typedef struct treenode//创建树节点的结构体{ Elemtype data; struct treenode * lchild; struct treenode * rchild;}treenode,*tree;void creattree(tree (*treeptr))//前序遍历{ Elemtype temp;//缓存输入 tree ptr; scanf("%d",&temp); if (temp==endmark) { *treeptr = NULL; return; } else { ptr = (tree)malloc(sizeof(treenode)); ptr->data=temp; *treeptr = ptr; creattree(&(*treeptr)->lchild);//对左子树赋值 creattree(&(*treeptr)->rchild);//对右子树赋值 }}void PreOrderTraverse(tree treeptr)//前序遍历{ if (treeptr==NULL) { return; } else { printf("%d\n",treeptr->data); PreOrderTraverse(treeptr->lchild);//对左子树赋值 PreOrderTraverse(treeptr->rchild);//对右子树赋值 }}void InOrderTraverse(tree treeptr)//中序遍历{ if (treeptr==NULL) { return; } else { InOrderTraverse(treeptr->lchild);//对左子树赋值 printf("%d\n",treeptr->data); InOrderTraverse(treeptr->rchild);//对右子树赋值 }}void PostOrderTraverse(tree treeptr)//后序遍历{ if (treeptr==NULL) { return; } else { PostOrderTraverse(treeptr->lchild);//对左子树赋值 PostOrderTraverse(treeptr->rchild);//对右子树赋值 printf("%d\n",treeptr->data); }}void main(){ tree treehead=NULL; creattree(&treehead);//创建二叉树 printf("\n前序输出\n"); PreOrderTraverse((treehead)); printf("\n中序序输出\n"); InOrderTraverse(treehead); printf("\n后序输出\n"); PostOrderTraverse(treehead); system("pause");}
其中1000为结束标志 输入1、2、3、1000、1000、4、1000、1000、5、6、1000、1000、7、1000、1000
顺序输出为:1、2、3、4、5、6、7
中序输出为:3、2、4、1、6、5、7
后序输出为:3、4、2、6、7、5、1
0 0
- 数据结构—二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构——二叉树
- 数据结构学习—二叉树
- 数据结构—平衡二叉树
- 数据结构—平衡二叉树
- 黑马程序员──────Java基础───抽象、接口与文本的建立
- SQL Server 数据库结构查询
- html基础1
- 学习笔记
- 最短的IE判断var ie=!-[1,]分析
- 数据结构——二叉树
- NSDate 与 NSString 转换相差 8 个小时问题
- jQuery-jQuery中的事件
- windows下面安装Python和pip终极教程
- Testlink可能遇到的问题
- 三大WEB服务器对比分析(apache ,lighttpd,nginx)
- Untiy3D笔记之番外篇——判断手指滑动方向
- hdu5438 Ponds(并查集、拓扑排序)
- 蓝懿 知识点总结