二叉树的遍历

按照一定次序访问树中所有结点
并且每个结点的值仅被访问一次
二叉树
    D
↙ ↘
L       R
先根遍历:DLR
中先遍历:LDR
后根遍历:LRD

遍历的顺序是先左后右


#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>

typedef struct  btnode
	  {char    data;            
	   struct  btnode  *lchild;//左结点
	   struct  btnode  *rchild;//右结点  
	   }NODE; //定义一个结点结构体

NODE  * create(NODE *p)    //创建一颗树
 {	char ch;
	NODE *t;
    scanf("%c",&ch);
	if(ch==' ')  p=NULL;
	else
	 {p->data=ch;
	  t=(NODE *)malloc(sizeof(NODE));
	  p->lchild=create(t);
	  t=(NODE*)malloc(sizeof(NODE));
	  p->rchild=create(t);
	 }
	  return p;
 }

void preorder(NODE *root)   //先根遍历
{	if (root!=NULL)
	   { printf( " %c", root->data);
		 preorder(root->lchild);
		 preorder(root->rchild);
		}
   return;
 }

void   inorder (NODE *root)  //中根遍历  递归调用inorder
{	if (root!=NULL)
	  {	inorder(root->lchild);
		printf(" %c ", root->data);
		inorder(root->rchild);
	  }
	return;
 }

void postorder(NODE *root)  //后根遍历
{	if (root!=NULL)
	 {	postorder (root->lchild);
		postorder (root->rchild);
		printf(" %c ", root->data);
	  }
     return;
}

void main()
{	
	NODE *root,*q,n;
	NODE *create(NODE *p);  //create()  创建树 
	void preorder(NODE *root);
	void inorder(NODE *root);
	void postorder(NODE *root);

 	printf("At  the first,we create a tree\n");
	printf("Please input nodes of tree\n"); 

	int t;
	q=&n;
	root=create(q);

	if  (root==NULL)   
		printf("It's  an empty  tree!\n");
	else
	   {
		printf("  1.xian gen \n");
	    printf("  2.zhong gen \n");
	    printf("  3.hou gen \n");
		printf("  Please choose  a  kind  of  order\n");
		scanf("%d",&t);

		switch(t)
		   {
			case 1: preorder(root);  break;
			case 2: inorder(root);   break;
			case 3:postorder(root);   break;
			default: printf(" The error!");
		   }
		}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值