c++ 二叉树 的递归建立和递归遍历
2014-09-02 15:24
369 查看
最近应为要找工作准备把数据结构的基础的东西在不借助外力的情况下,自己都编写一遍,以为自己都知道的,结果一遍种小错误,简直要人命啊………………
本例最大的收获,*本质上是传值的,所以得用*&(指针的应用),不信你递归建立二叉树的时候用指针(不用指针引用)试试……
BiTree.cpp如下:
结果如下:
本例最大的收获,*本质上是传值的,所以得用*&(指针的应用),不信你递归建立二叉树的时候用指针(不用指针引用)试试……
BiTree.cpp如下:
#include <iostream> using namespace std; template<typename T> struct BiTreeNode { T data; BiTreeNode *Lchild, *Rchild; BiTreeNode() :Lchild(NULL), Rchild(NULL){} BiTreeNode(const T& d, BiTreeNode *lchild = NULL, BiTreeNode *rchild = NULL) :data(d), Lchild(lchild), Rchild(rchild){} }; template<typename T> class BiTree { public: BiTree(){ /*root = NULL;*/ } ~BiTree(){ /*makeEmpty();*/ } void makeEmpty(BiTreeNode<T>* &root); void createBiTree(BiTreeNode<T>* &root); void output(BiTreeNode<T> *root); void preOrder(BiTreeNode<T>* &root); void inOrder(BiTreeNode<T>* &root); void postOrder(BiTreeNode<T>* &root); //BiTreeNode<T> * root; }; template<typename T> void BiTree<T>::createBiTree(BiTreeNode<T>* &root) { char ch; cin >> ch; if (ch == '#') { root = NULL; } else { root = new BiTreeNode<T>(ch); createBiTree(root->Lchild); createBiTree(root->Rchild); } } template<typename T> void BiTree<T>::output(BiTreeNode<T> *root) { if (root) { cout << root->data << " "; output(root->Lchild); output(root->Rchild); } } template<typename T> void BiTree<T>::makeEmpty(BiTreeNode<T>* &root) { } template<typename T> void BiTree<T>::preOrder(BiTreeNode<T>* &root) { if (root) { cout << root->data << " "; preOrder(root->Lchild); preOrder(root->Rchild); } } template<typename T> void BiTree<T>::inOrder(BiTreeNode<T>* &root) { if (root) { preOrder(root->Lchild); cout << root->data << " "; preOrder(root->Rchild); } } template<typename T> void BiTree<T>::postOrder(BiTreeNode<T>* &root) { if (root) { postOrder(root->Lchild); postOrder(root->Rchild); cout << root->data << " "; } } void main() { BiTreeNode<char> * R=NULL; BiTree<char> * bt = new BiTree<char>(); bt->createBiTree(R); cout << "输出结果是:" << endl; bt->output(R); cout << endl; cout << "先根遍历:" << endl; bt->preOrder(R); cout << endl; cout << "中根遍历:" << endl; bt->inOrder(R); cout << endl; cout << "后根遍历:" << endl; bt->postOrder(R); cout << endl; while (1) { } }
结果如下:
相关文章推荐
- C++实现二叉树的建立和三种递归遍历
- 二叉树的建立与递归遍历C++版
- 二叉树的先序建立与非递归遍历C++版
- (C++)二叉树的建立与递归方式遍历
- 二叉树建立与遍历递归操作c++实现
- 二叉树的建立、遍历、添加、销毁(...递归)
- C++ 实现求二叉树的深度及遍历(递归与非递归算法)
- 二叉树的建立及遍历各种递归
- 二叉树的建立、销毁、各种遍历(递归、非递归)
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- C语言二叉树建立,遍历(递归与非递归),交换子树
- 二叉树的遍历(C++非递归实现)
- C++数据结构--二叉树的建立,前序遍历,中序遍历和后序遍历
- 【非递归】二叉树的建立及遍历
- 二叉树的建立(根据遍历结果构建)、遍历(非递归)和搜索
- 二叉树递归建立--深搜+宽搜遍历
- 二叉树的递归与非递归遍历源码(C++)
- 二叉树(前中后序递归非递归遍历,层次遍历,C++实现)
- 二叉树建立、递归、非递归遍历
- 二叉树的建立以及前序、中序、后序遍历的递归和非递归实现