二叉树的创建与遍历

二叉树(Binary Tree)是n(n >= 0)个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两颗互不相交的,分别称为根节点的左子树和右子树的二叉树组成。

一种为二叉树顺序存储结构,另一种为二叉树的链式存储结构

二叉链表:有一个数据域和两个指针域

一,二叉链表的节点结构定义:

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

二,根据先序创建二叉树

BiTree CreatBiTree(){
	BiTree T;
	char c;
	scanf("%c",&c);
	if(c == '#'){
		T=NULL;
	}
	else{
		T=(BiTree)malloc(sizeof(BiTNode));
		T->data=c;
		T->lchild= CreatBiTree();
		T->rchild= CreatBiTree();
	}
	return T; 
}
visit(char data){
	printf("%c",data);
}

三,二叉树的简单遍历(前序,中序,后序)

完整代码:

#include<stdio.h>
#include<stdlib.h>
//建立二叉树结构体 
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild, *rchild; 
}BiTNode,*BiTree;
//根据先序创建二叉树 
BiTree CreatBiTree(){
	BiTree T;
	char c;
	scanf("%c",&c);
	if(c == '#'){
		T=NULL;
	}
	else{
		T=(BiTree)malloc(sizeof(BiTNode));
		T->data=c;
		T->lchild= CreatBiTree();
		T->rchild= CreatBiTree();
	}
	return T; 
}
visit(char data){
	printf("%c",data);
}
//先序遍历 
xxTrvel(BiTree T){
	if(T){
		visit(T->data);
		xxTrvel(T->lchild);
		xxTrvel(T->rchild);			
	}
}
//中序遍历
zxTrvel(BiTree T) {
	if(T){
		zxTrvel(T->lchild);
		visit(T->data);‘ 
		zxTrvel(T->rchild);
	}
} 
//后序遍历
hxTrvel(BiTree T){
	if(T){
		hxTrvel(T->lchild);
		hxTrvel(T->rchild);
		visit(T->data); 
	}
}
 
int main()
{
	BiTree T;
	T=CreatBiTree();
	printf("先序遍历结果:"); 
	xxTrvel(T);
	printf("\n");
	printf("中序遍历结果:"); 
	zxTrvel(T);
	printf("\n");
	printf("后序遍历结果:"); 
	hxTrvel(T);
	printf("\n");
	return 0; 
}

上一篇:5.1~5.5二叉树的基本操作


下一篇:python脚本调用python脚本和shell脚本并传参,接收参数并转成传参时的数据类型