二叉树的建立与遍历

二叉树的存储结构

typedf struct tree
{
	char data;                    //1个数据域
	struct tree *lchild,*rchild;  //2个指针域(左子树、右子树) 
}node,*tree; 

遍历二叉树

 二叉树遍历的概念:按照一定次序访问树中所有结点,且每个结点仅被访问一次的过程。

先序遍历:(1)访问根结点

                  (2)先序遍历左子树

                  (3)先序遍历右子树

栗子:如上图先序遍历的结果为:124753689

 代码如下:

void preorder(tree *&bt){  //先序遍历根结点为bt的二叉树的递归算法 
	if (bt)
	{
		printf("%c",bt->data);  //访问根结点 
		preorder(bt->lchild);   //先序遍历左子树 
		preorder(bt->rchild);   //先序遍历右子树 
	} 
}
 补充‘&bt’:

引例:交换a和b的值。(比较以下两个函数哪个能实现)

void swap1(int a,int b){
	int t;
	t=a;a=b;b=t;
}
void swap2(int &a,int &b){
	int t;
	t=a;a=b;b=t;
}

 显然,swap2函数才能实现a和b值的交换。其关键在于形参传递:int &a = x(实参),则a就是x,两者地址一样,相当于就是x换了个名字。

中序遍历:(1)中序遍历左子树

                   (2)访问根结点

                   (3)中序遍历右子树

栗子:如上图中序遍历的结果为:742513869

 代码如下:

void inorder(tree *&bt){  //中序遍历根结点为bt的二叉树的递归算法 
	if (bt)
	{
		inorder(bt->lchild);    //中序遍历左子树 
		printf("%c",bt->data);  //访问根结点
		inorder(bt->rchild);    //中序遍历右子树 
	}
}

后序遍历:(1)后序遍历左子树

                   (2)后序遍历右子树

                   (3)访问根结点

栗子:如上图中序遍历的结果为:745289631

 代码如下:

void postorder(tree *&bt){  //后序遍历根结点为bt的二叉树的递归算法 
	if (bt)
	{
		postorder(bt->lchild);  //后序遍历左子树 
		postorder(bt->rchild);  //后序遍历右子树
		printf("%c",bt->data);  //访问根结点
	}
}

 建立二叉树

void pre_crt(tree *&bt){ //pre:按先序次序输入结点 crt:建立二叉树  
	char ch;
	scanf("%c",&ch);     //输入'$'表示空树
	if (ch!='$')
	{
		bt->data=ch;
		pre_crt(bt->lchild);  //建立左子树
		pre_crt(bt->rchild);  //建立右子树 
	}
	else bt=NULL; 
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值