二叉树的递归创建及遍历【前序、中序、后序】(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; }
相关文章推荐
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- C++实现二叉树的递归遍历与非递归遍历(先序、中序、后序、层序)
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 采用二叉链表结构实现二叉树,并以递归遍历思想实现二叉树的创建、二叉树的遍历(先序、中序、后序和层次遍历)
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- leetcode笔试题二叉树的前序、中序、后序遍历的递归和循环c++实现
- 探讨:C++实现链式二叉树(用非递归方式先序,中序,后序遍历二叉树)
- 二叉树的遍历:前序,中序,后序,层序--包括递归和非递归实现
- 二叉树的前序、中序、后序遍历(递归、非递归)实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 二叉树的遍历(前序、中序、后序、层序),递归和非递归实现
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- java语言实现二叉树的前序、中序与后序遍历(递归与非递归)
- 二叉树前序、中序、后序遍历的递归与非递归算法实现
- 二叉树的非递归前序、中序以及后序遍历C++模版类实现
- 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树 —— 创建 + 先序、中序、后序遍历(递归+非递归)