您的位置:首页 > 编程语言 > C语言/C++

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

2018-11-30 12:14 246 查看

存储实现:

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

    lchild      root     rchild

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

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

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

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

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

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

  终于成功了的代码实现

[code]#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;
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐