遍历二叉树

#include<stdio.h>
#include<stdlib.h>
typedef char elemtype;
typedef struct BiTNode{
	char data;
	struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree; 
//FCA##DB###EH##GM### 
BiTree CreatBiTree()  //3
{
	BiTree T;
	char c;
	scanf("%c",&c);
	if('#'==c){
		T=NULL;       //4
	}
	else{
		T=(BiTree)malloc(sizeof(BiTNode));   //申请一个节点 
		T->data=c;
		T->lchild=CreatBiTree();   //1 不为空,执行1,然后返回到3;
		                           //  为空,从3执行到4,返回T,即返回到上一个断点的地方-19行,然后执行2;返回到3; 
		T->rchild=CreatBiTree();   //2
	}
	return T;
}

visit(char data)    //提示没有类型,在函数前加void 
{
	printf("%c\n",data);
}

PreOrderTraverse(BiTree T)
{
	if(T){
		visit(T->data);
		PreOrderTraverse(T->lchild);
		PreOrderTraverse(T->rchild);
	}
}

InOrderTraverse(BiTree T)
{
	if(T){
		
		InOrderTraverse(T->lchild);
		visit(T->data);
		InOrderTraverse(T->rchild);
	}
}

PostOrderTraverse(BiTree T)
{
	if(T){
		
		PostOrderTraverse(T->lchild);
		
		PostOrderTraverse(T->rchild);
		visit(T->data);
	}
}

//int Depth(BiTree T)
//{
//	
//	int m,n;
//	if(T=NULL)  return 0;
//	else{
//		m=Depth(T->lchild);
//		n=Depth(T->rchild);
//		if(m>n)  return(m+1);
//		else return(n+1);
//	}
//}


void seqtraverse(BiTree T)
{
	if(T)
	{
		BiTree a[100];
		a[0]=T;
		int first=0;
		int rear=1;
		while(first<rear){
			printf("%c",a[first]->data);
			if(a[first]->lchild)
			{
				a[rear++]=a[first]->lchild;
			}
			if(a[first]->rchild)
			{
				a[rear++]=a[first]->rchild;
			}
			first++;
			
		}
	}
 
}
int main()
{
	BiTree T;
	T=CreatBiTree();
	printf("先序遍历二叉树\n");
	PreOrderTraverse(T);
	printf("中序遍历二叉树\n");
	InOrderTraverse(T);
	printf("后序遍历二叉树\n");
	PostOrderTraverse(T);
	printf("二叉树的层次遍历\n");
	seqtraverse(T);
	
	//printf("二叉树的高度为:%d",Depth(T));
	
	return 0;
}


 

二叉树的遍历方法有:先序,中序和后序遍历。

二叉树本质用了递归思想:

先序:先遍历根,再遍历左子树,之后右子树

中序:先遍历左子树,再遍历根,之后右子树

后序:先遍历左子树,再遍历右子树,之后根

不管哪种遍历方法,一定是先遍历左子树,然后才是右子树。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值