0
点赞
收藏
分享

微信扫一扫

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

janedaring 2022-03-31 阅读 107

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

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

二叉树的节点结构如下:

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 条评论