首页 > 代码库 > 二叉树的创建与遍历(链式存储)
二叉树的创建与遍历(链式存储)
这里采用的是链式存储,每个结点包含三个属性(指向左右孩子的指针和本结点的数据),如果想了解顺序存储二叉树,可以参考http://www.cnblogs.com/-beyond/p/6065189.html
采用先序递归创建二叉树,叶子的左右孩子链域为NULL
输入的顺序为:abd--e--c-f-- (-表示空一个空格)
#include<iostream> #include<cstdio> using namespace std; struct BiTNode{ BiTNode *lchild,*rchild; char data; }; typedef BiTNode *BiTree; const char Nil=‘ ‘;//默认值 const int maxn=100; //初始化 void InitBiTree(BiTree &T){ T=NULL; } //销毁 void DestoryBiTree(BiTree &T){ if(T){//树不为空 if(T->lchild){//递归方法销毁左子树 DestoryBiTree(T->lchild); } if(T->rchild){//递归方法销毁右子树 DestoryBiTree(T->rchild); } delete(T); T=NULL; } } //此代码段没有调用 void Visit(char value){ cout<<value<<‘ ‘; } //先序递归遍历 void PreOrderTraverse(BiTree T){ if(T){ cout<<T->data<<‘ ‘; PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } //中序递归遍历 void InOrderTraverse(BiTree T){ if(T){ InOrderTraverse(T->lchild); cout<<T->data<<‘ ‘; InOrderTraverse(T->rchild); } } //后序递归遍历 void PostOrderTraverse(BiTree T){ if(T){ PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); cout<<T->data<<‘ ‘; } } //先序递归建立二叉树 void CreateBiTree(BiTree &T){ char ch; scanf("%c",&ch); if(ch==Nil){ T=NULL; } else { T=new BiTNode; if(!T){ cout<<"申请内存失败"<<endl; } T->data=http://www.mamicode.com/ch;"先序遍历"<<endl; PreOrderTraverse(T); cout<<endl<<"中序遍历"<<endl; InOrderTraverse(T); cout<<endl<<"后序遍历"<<endl; PostOrderTraverse(T); cout<<endl<<"树的根为"<<endl; cout<<GetRoot(T)<<endl; cout<<"深度"<<endl; cout<<BiTreeDepth(T)<<endl; }
测试数据:
abd__e__c_f__
结果:
过程中有点小问题,很容易被忽略的:在创建二叉树的时候,输入单个字符的时候不要用cin,应该用scanf
二叉树的创建与遍历(链式存储)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。