二叉树的递归创建及遍历【前序、中序、后序】(C++实现)

存储实现:

采用二叉链表实现,每个结点有一个数据域、一个指向左孩子的指针、一个指向右孩子的指针。

    lchild     root    rchild

以下是我踩(nao)过(can)的(shun)雷(jian)

1.定义了root(结点),但是没有分配内存空间

2.建议不要在创建二叉树的函数里设置形参,没有必要传来传去。

             原因:①浪费空间(每传递一次就要被复制一次)

                       ②逻辑比较绕,可读性差,容易出错

3.中序遍历和后序遍历的时候,复制先序遍历的代码,改了递归调用和输出结点值的顺序,但是忘了改调用函数的函数名,导致后序和中序遍历的结果不对。【复制需谨慎啊

  终于成功了的代码实现

#include <iostream>
using namespace std;

typedef struct btnode{
	char  data;
	struct btnode *lchild,*rchild;
}btnode,*bitree;

/*先序递归创建二叉树*/
bitree preCreateBitree()
{
	char ch ;
//	cout<<"请输入:"<<endl; 
	bitree root;		//root为每一个新结点 
	root=new(btnode);		//给每个结点开辟空间 
	cin>>ch;
	if(ch=='#')   root=NULL;
	else{
		root->data=ch;
		root->lchild=preCreateBitree();
		root->rchild=preCreateBitree();
	}
	return root;
}

/*先序遍历*/
void fSearch(bitree root)
{
	if(root)
	{
		cout<<root->data;
		fSearch(root->lchild);
		fSearch(root->rchild);
	}	
	return ;
}
/*中序遍历*/
void mSearch(bitree root)
{
	if(root)
	{
		mSearch(root->lchild);
		cout<<root->data;
		mSearch(root->rchild);
	}	
	return ;
}
/*后序遍历*/
void lSearch(bitree root)
{
	if(root)
	{
		lSearch(root->lchild);
		lSearch(root->rchild);
		cout<<root->data;
	}	
	return ;
}

//主函数
int main()
{
	bitree root;
	root=preCreateBitree();
	cout<<"先序遍历:"<<endl;
	fSearch(root);
	cout<<endl<<"中序遍历:"<<endl;
	mSearch(root);
	cout<<endl<<"后序遍历:"<<endl;
	lSearch(root);
	return 0;
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值