C++ 二叉树的创建以及遍历
2014-01-06 15:46
369 查看
在笔试面试的过程中,二叉树也是难点之一,考的也是比较多的。我也是被这个问题给难倒过,不能在一个地方摔两次啊!虽然这个东西第一次写出来了,可是如果长时间不看不写不用,还是很容易忘记的。温故而知新,老子还是很厉害的啊,要谨记老子的话了。废话不多说,直接上代码吧!还是一样在VC6.0上调试过的。
#include <stdio.h> #include <iostream> #include <string> using namespace std; typedef struct BT { char data; struct BT *lch,*rch; }BT; void CreatBT(BT *L,string str,int r) //建立二叉树 { L->data = str[r]; if (str[r*2+1]=='#'||r*2+1>str.size()-1) { L->lch = NULL; } else { L->lch = new BT; CreatBT(L->lch,str,r*2+1); } if (str[r*2+2]=='#'||r*2+2>str.size()-1) { L->rch = NULL; } else { L->rch = new BT; CreatBT(L->rch,str,r*2+2); } } void preorder(BT *root)//先序遍历二叉树 { cout<<root->data<<" "; if (root->lch != NULL) { preorder(root->lch); } if (root->rch !=NULL) { preorder(root->rch); } } void inorder(BT *root)//中序遍历二叉树 { if (root->lch !=NULL) { inorder(root->lch); cout<<root->data<<" ";//输出带有左右子树的根节点 if (root->rch != NULL) { inorder(root->rch); } } else { cout<<root->data<<" ";//输出无左右子树的根节点 } } void postorder(BT *root)//后序遍历二叉树 { if (root->lch !=NULL) { postorder(root->lch); } if (root->rch != NULL) { postorder(root->rch); } cout<<root->data<<" "; } int main() { BT *L = new BT; string str; cin>>str; CreatBT(L,str,0); cout<<"先序遍历二叉树:"; preorder(L); cout<<endl; cout<<"中序遍历二叉树:"; inorder(L); cout<<endl; cout<<"后序遍历二叉树:"; postorder(L); cout<<endl; return 0; }
相关文章推荐
- c++实现二叉树的非递归创建以及非递归先序、中序、后序遍历
- C,C++创建二叉树,以及3种遍历
- C++之二叉树的创建、查找、四种次序的周游遍历方法以及内存的释放
- 二叉树的创建,先序、中序、后序遍历的递归实现以及层序遍历
- 二叉树的创建,插入,删除,输出,求高度,求度以及三种遍历方式实现
- C++采用类模板实现二叉树以及谦虚遍历
- 二叉树的创建以及遍历方法
- java实现二叉树的创建以及遍历
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 二叉树的创建以及递归非递归遍历
- 二叉树动态链式创建以及遍历
- 二叉树的递归创建,以及二叉查找树查找的建立 和遍历查找的比较
- C++二叉树之构造拷贝赋值,递归和非递归的前序遍历,中序遍历和后序遍历,以及层序遍历
- 二叉树的非递归前序、中序以及后序遍历C++模版类实现
- 二叉树的创建以及利用迭代实现中序、先序、后序遍历、清空
- 二叉树的创建以及遍历
- 二叉树的基本操作精集(创建、遍历、求深度结点以及叶子结点个数)
- 二叉树(一):二叉树的创建以及三种遍历方法的递归实现
- C++ 二叉树实现 创建,先序遍历,中序遍历,后序遍历
- 二叉树的创建和遍历C++实现