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

存储实现:

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

    lchild      root     rchild

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

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

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

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

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

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

  终于成功了的代码实现

#include 
using namespace std;

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

/*先序递归创建二叉树*/
bitree preCreateBitree()
{
	char ch ;
//	cout<<"请输入:"<>ch;
	if(ch=='#')   root=NULL;
	else{
		root->data=ch;
		root->lchild=preCreateBitree();
		root->rchild=preCreateBitree();
	}
	return root;
}

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

//主函数
int main()
{
	bitree root;
	root=preCreateBitree();
	cout<<"先序遍历:"<

 

你可能感兴趣的:(数据结构)