二叉树的创建及先中后遍历

二叉树由根节点和子树构成,子树又分为左子树和右子树,是一种递归定义。

二叉树在利用顺序存储时,一般都是先将其补成完全二叉树之后,在进行存储,如果一个树没有左孩子,只有右孩子,深度还较大时,将浪费大量空间。所以一般二叉树利用链式存储的方式实现。

二叉树的节点结构如下:

typedef char datatype_bt;
typedef struct btreenode{
	datatype_bt data;      //数据类型
	struct btreenode *lchild,*rchild;	//左孩子和右孩子
}btree_node,*btree_pnode;

在创建二叉树时通过让用户输入的方式来申请空间,具体代码如下:

btree_pnode create_btree(void)  //创建二叉树
{
	datatype_bt ch;
	btree_pnode new;
	scanf("%c",&ch);
	if('#'== ch)
		return NULL;
	else
	{
		if((new = (btree_pnode)malloc(sizeof(btree_node)))== NULL)
		{
			printf("malloc failed!\n");
			return NULL;
		}
		new->data = ch;
		
		new->lchild = create_btree();  //用相同方法创建左子树
		new->rchild = create_btree();  //用相同方法创建右子树
	}
}

在进行遍历时常见的先序、中序、后序三种方式如下:

void pre_order(btree_pnode t) //先序遍历递归算法实现
{
	if(t!=NULL)
	{
		
		printf("%c",t->data);//访问根节点
		pre_order(t->lchild);//先序遍历左子树
		pre_order(t->rchild);//先序遍历右子树
	}
}

void mid_order(btree_pnode t) //中序遍历递归算法实现
{
	if(t!=NULL)
	{
		mid_order(t->lchild);
		printf("%c",t->data);
		mid_order(t->rchild);
	}
}

void last_order(btree_pnode t) //后序遍历递归算法实现
{
	if(t!=NULL)
	{	
		last_order(t->lchild);//后序遍历左子树
		last_order(t->rchild);//后序遍历右子树
		printf("%c",t->data);
	}	
}

反思:

要深刻理解二叉树的递归定义,然后才能在实现各种方法时巧妙的利用递归特性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值