先序创建二叉树及先序、中序、后序遍历

原创 2018年04月15日 22:56:56

先序二叉树

//先序建立二叉树
void createBiTree(BiTree &T){
	int cnt;
	scanf("%d",&cnt);
	if(cnt == -1){
		T = NULL;
		return ;
	}
	T = (BiTNode *)malloc(sizeof(BiTNode));
	T->data = cnt;
	T->lchild = NULL;
	T->rchild = NULL;
	createBiTree(T->lchild);
	createBiTree(T->rchild);
} 

先序遍历:

//先序遍历
void PreOrder(BiTree T){
	if(T==NULL){
		return ;
	}
	visit(T);
	PreOrder(T->lchild);
	PreOrder(T->rchild);
} 

中序遍历:

//中序遍历
void InOrder(BiTree T){
	if(T == NULL){
		return ;
	}
	InOrder(T->lchild);
	visit(T);
	InOrder(T->rchild);	
}  

后序遍历:

//后序遍历 
void PostOrder(BiTree T){
	if(T==NULL){
		return ;
	}
	PostOrder(T->lchild);
	PostOrder(T->rchild);
	visit(T);
}

完整代码:

#include<cstdio>
#include<iostream>
#include<cstdlib>
#define ElemType int
#define MaxSize 100
using namespace std;
//构造节点 
typedef struct BiTNode{
	ElemType data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

//先序建立二叉树
void createBiTree(BiTree &T){
	int cnt;
	scanf("%d",&cnt);
	if(cnt == -1){
		T = NULL;
		return ;
	}
	T = (BiTNode *)malloc(sizeof(BiTNode));
	T->data = cnt;
	T->lchild = NULL;
	T->rchild = NULL;
	createBiTree(T->lchild);
	createBiTree(T->rchild);
} 
//访问节点 
void visit(BiTree T){
	printf("%d",T->data);
}
//先序遍历
void PreOrder(BiTree T){
	if(T==NULL){
		return ;
	}
	visit(T);
	PreOrder(T->lchild);
	PreOrder(T->rchild);
} 
//中序遍历
void InOrder(BiTree T){
	if(T == NULL){
		return ;
	}
	InOrder(T->lchild);
	visit(T);
	InOrder(T->rchild);	
}  
//后序遍历 
void PostOrder(BiTree T){
	if(T==NULL){
		return ;
	}
	PostOrder(T->lchild);
	PostOrder(T->rchild);
	visit(T);
}

int main(){
	BiTNode *bTree;
	
	createBiTree(bTree); 
	PreOrder(bTree);
	printf("\n");
	InOrder(bTree);
	printf("\n");
	PostOrder(bTree);
	printf("\n"); 
	//printf("\n");
	
	return 0;
} 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/better_space/article/details/79954752

【数据结构_树_Tree_1051】先序创建然后输出指定结点

被自己蠢哭了... #include #include #include using namespace std; typedef struct node { char data; ...
  • IronCarrot
  • IronCarrot
  • 2017年04月01日 15:13
  • 229

先序顺序输入结点值创建二叉树,并按先序,中序和后序遍历输出

将如图所示的二叉树通过先序的顺序输入根据其值创建二叉树,如果某个节点其左子树为空,则用 * 代替其左子树节点值,如果某个节点其右子树为空,则用 * 代替其右子树节点值,按照此方式一次性输入节点值用空格...
  • vivi_and_qiao
  • vivi_and_qiao
  • 2017年03月23日 18:51
  • 2464

二叉树的前序、中序、后序遍历的相互求法(JAVA)

今天做前端的笔试题,第一个选择题就是已知前序和中序,求后序,突然发现自己数据结构的基础全忘了,所以上网查了查,自己写了个程序: 1.已知前序和中序,求后序: package nowcode; ...
  • d12345678a
  • d12345678a
  • 2016年08月02日 21:18
  • 1062

二叉树的创建(先序)先序中序后序遍历(递归算法),求叶子结点个数,求树的高度,树中结点的个数,值为data的结点所在的层数

#include #include #include #define OVERFLOW -2 typedef struct BiTNode{ char data; struct...
  • m0_37579232
  • m0_37579232
  • 2018年01月11日 21:37
  • 156

用二叉链表存储的二叉树进行先序、中序和后序遍历的算法

用二叉树链表作为存储结构,完成二叉树的建立,先序、中序和后序以及按层次遍历的操作,求所有叶子及结点总数的操作 #include   #include   #include   ...
  • printf88
  • printf88
  • 2017年10月12日 12:34
  • 493

二叉树的创建 先序 中序 后续 递归和非递归遍历

二叉树 递归非递归遍历 总结
  • u011561690
  • u011561690
  • 2015年04月15日 19:00
  • 905

如何弄清二叉树前序中序后序遍历的顺序

由于这三种遍历方法都是使用递归的方式进行访问每个节点的操作: 那么进入每个节点什么时候进行读取都是由他们的遍历方式的顺序决定的,举例中序遍历,他的顺序为PAS,Pred代表左孩子、Succ代表右孩子...
  • qq_16239673
  • qq_16239673
  • 2017年04月28日 13:54
  • 758

基于C++的二叉树的建立,前序中序后序遍历

基于C++的二叉树的建立,前序中序后序遍历
  • xing_827
  • xing_827
  • 2017年03月22日 16:35
  • 297

二叉树前序、中序、后序遍历的相互求法

二叉树前序、中序、后序遍历的相互求法       二叉树是数据结构中常被问到的相关知识点,也是我们需要了解的一个知识点,那今天来总结一下二叉树的前序、中序、后序遍历的相互求法,即如果知道两个...
  • u014536527
  • u014536527
  • 2016年03月30日 02:45
  • 8156

根据先序序列和中序序列创建二叉树

思考:如何才能确定一棵树? 结论:    通过中序遍历和先序遍历可以确定一个树                 通过中序遍历和后续遍历可以确定一个树                 通过先序遍历和后序...
  • bbs375
  • bbs375
  • 2016年10月06日 19:12
  • 8925
收藏助手
不良信息举报
您举报文章:先序创建二叉树及先序、中序、后序遍历
举报原因:
原因补充:

(最多只允许输入30个字)