二叉树的C++实现
2015-04-02 10:40
113 查看
这个实现的时候由于采用了递归,思路比较清晰。出错的地方是在建立树的时候关于指针的指针容易出错,我比较菜,求助了网上的热心人才搞明白。
附上网址供大家参考http://bbs.csdn.net/topics/391008633
http://www.cnblogs.com/greatIDeas/archive/2010/11/24/1886915.html http://blog.csdn.net/muzi9_17/article/details/6745141 http://blog.163.com/northow@126/blog/static/11814806020094257579530/
附:二叉树的基本性质
1、二叉树的第i层上最多有2^(i-1)个结点(i>=1)
2、一棵深度为k的二叉树中,最多有2^(k)-1个结点,最少有k个结点。
3、二叉树中,如果叶子结点的个数为n0,度为2的结点个数为n2,则n0=n2+1
4、具有n个结点的完全二叉树的深度为└log2(n)┘+1
附上网址供大家参考http://bbs.csdn.net/topics/391008633
http://www.cnblogs.com/greatIDeas/archive/2010/11/24/1886915.html http://blog.csdn.net/muzi9_17/article/details/6745141 http://blog.163.com/northow@126/blog/static/11814806020094257579530/
附:二叉树的基本性质
1、二叉树的第i层上最多有2^(i-1)个结点(i>=1)
2、一棵深度为k的二叉树中,最多有2^(k)-1个结点,最少有k个结点。
3、二叉树中,如果叶子结点的个数为n0,度为2的结点个数为n2,则n0=n2+1
4、具有n个结点的完全二叉树的深度为└log2(n)┘+1
/************************************************************************* > File Name: BiTree.cpp > Author: Shorey > Mail: shoreybupt@gmail.com > Created Time: 2015年04月01日 星期三 10时53分46秒 ************************************************************************/ #include<iostream> using namespace std;
#define Max 100 struct BiNode { int data; BiNode *lchild,*rchild; }; class BiTree { public: BiTree(BiNode **root);//有参构造函数 ~BiTree(); void PreOrder(BiNode *root);//前序遍历 void InOrder(BiNode *root);//中序遍历 void PostOrder(BiNode *root);//后序遍历 void LevelOrder(BiNode *root);//层序遍历 void Release(BiNode *root);//销毁树 private: void Creat(BiNode **root);//调用析构函数 }; void BiTree::PreOrder(BiNode *root)//前序遍历 { if(root==NULL)return; //递归调用结束条件 else { cout<<root->data; //访问根节点 PreOrder(root->lchild); //前序递归访问左子树 PreOrder(root->rchild); //前序访问右子树 } } void BiTree::InOrder(BiNode *root)//中序遍历 { if(root==NULL)return; //递归调用结束条件 else { InOrder(root->lchild); //中序访问左子树 cout<<root->data; //中序访问根节点 InOrder(root->rchild); //中序访问右子树 } } void BiTree::PostOrder(BiNode *root)//后序遍历 { if(root==NULL)return; else { PostOrder(root->lchild); PostOrder(root->rchild); cout<<root->data; } } void BiTree::LevelOrder(BiNode *root)//层序遍历 { BiNode *Q[Max],*q; //设置缓冲队列和工作指针 int front=0,rear=0; //缓冲队列头指针和尾指针初始化 if(root==NULL)return; Q[(++rear)%Max]=root; //根节点入队 while(front!=rear) //队列不空则继续 { q=Q[(++front)%Max]; //队头出队 cout<<q->data; //打印 if(q->lchild!=NULL)Q[(++rear)%Max]=q->lchild;//左孩子入队 if(q->rchild!=NULL)Q[(++rear)%Max]=q->rchild;//右孩子入队 } } BiTree::BiTree(BiNode **root)//构造函数 { Creat(root); } void BiTree::Creat(BiNode **root) { int ch; cin>>ch; if(ch==-1)*root=NULL;//输入#则建立停止 else { *root=new BiNode; (*root)->data=ch; Creat(&((*root)->lchild));//递归建立左子树 Creat(&((*root)->rchild));//递归建立右子树 } } BiTree::~BiTree() { } void BiTree::Release(BiNode *root) { if(root!=NULL) { Release(root->lchild);//释放左子树 Release(root->rchild);//释放右子树 delete root; } } int main() { BiNode *root; BiTree tree(&root); cout<<endl; tree.PreOrder(root); cout<<endl; tree.InOrder(root); cout<<endl; tree.PostOrder(root); cout<<endl; tree.LevelOrder(root); cout<<endl; tree.Release(root); return 0; }
相关文章推荐
- 用C++实现二叉树
- 用C++实现二叉树(转)
- 求二叉树中节点间的最大距离(c++代码完整实现)
- ACM 重构二叉树 C++实现
- C/C++面试题(三) 推断二叉树、快速排序递归实现、递归判断数组递增
- 【头文件】c++实现二叉树
- [置顶] 二叉树的建立、节点查找以及节点删除C和C++实现
- 二叉树的遍历(C++非递归实现)
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- C++ 二叉树的构建,先序/中序/后序的递归/非递归实现
- 二叉树的后序遍历非递归算法之C++实现 选择自 xuyongfeng 的 Blog
- 二叉树用顺序表实现 C++代码实现
- [C/C++] 先序建立二叉树| 先序、中序、后序遍历二叉树| 求二叉树深度、节点数、叶节点数 算法实现
- 简单链式二叉树(C++模版技术实现)
- C++ 二叉树的实现以及指针使用注意事项
- 数据结构复习:几种排序算法的C++实现和二叉树的相关算法实现
- 用C++实现二叉树
- C++对二叉树的简单实现。
- 数据结构_树_二叉树的线索化_C++实现
- C++ 二叉树的实现