二叉树的链式存储结构 C++代码实现
2010-11-18 11:09
1201 查看
/*二叉树的链式存储结构*/ #include <iostream> using namespace std; /*二叉链表的定义*/ typedef struct BiTNode { & amp;nbsp; char data; struct BiTNode *lchild,*rchild; }BiTNode; typedef BiTNode * BiTree; //*************************************************** //*************************************************** /*顺序栈的定义*/ typedef struct sqStack { BiTNode **elem;//栈里面应该存放的是BiTNode数据的指针,也就是地址,而不是BiTNode型的数据 int top; int stackSize; }sqStack; /*顺序栈的初始化*/ void initStack_Sq(sqStack &S) { S.elem=new BiTNode*[100];//应该分配(BiTNode * )型的空间 S.top=-1; S.stackSize=100; } /*入栈*/ void push_Sq(sqStack &S,BiTNode * x)//此处形参应该为指针型的。 { if(S.top==99) cout<<"Stack Overflow!"; else { S.top++; S.elem[S.top]=x; } } /*出栈*/ BiTNode * pop_Sq(sqStack &S)//此处返回值也应该是指针型的 { BiTNode * x; if(S.top==-1) cout<<"Stack Empty!"; x=S.elem[S.top]; S.top--; return x; } //******************************************************* //******************************************************* /*按先序序列,用递归算法创建二叉链表*/ BiTree CreatBiTree_Pre(BiTree &BT) { char ch; cin>>ch; if(ch=='0') BT=NULL;//如果是空格字符,则表示为空树。 else { BT=new BiTNode; BT->data=ch;//生成根结点 CreatBiTree_Pre(BT->lchild);//递归建立左子树,不能写成BT->lchild=CreatBiTree_Pre(BT),递归应该在现有的 //基础上进行递归。牢记此形式!!! CreatBiTree_Pre(BT->rchild);//递归建立右子树 } return 0; } /*前序递归遍历*/ void PreOrder_Re(BiTree &BT) { if(BT) { cout<<BT->data<<" "; PreOrder_Re(BT->lchild); PreOrder_Re(BT->rchild); } } /*中序递归遍历*/ void InOrder_Re(BiTree &BT) { if(BT) { InOrder_Re(BT->lchild); cout<<BT->data<<" "; InOrder_Re(BT->rchild); } } /*前序非递归遍历*/ void PreOrder_NRe(BiTree &BT) { BiTNode *p; sqStack S; initStack_Sq(S); p=BT; while(p||!(S.top==-1)) { if(p) { push_Sq(S,p); cout<<p->data<<" "; p=p->lchild; } else { p=pop_Sq(S); p=p->rchild; } } cout<<endl; } /*中序非递归遍历*/ void InOrder_NRe(BiTree &BT) { BiTNode *p; sqStack S; initStack_Sq(S); p=BT; while(p||!(S.top==-1)) { if(p) { push_Sq(S,p); p=p->lchild; } else { p=pop_Sq(S); cout<<p->data<<" "; p=p->rchild; } } cout<<endl; } void main() { BiTree BT; //creatBiTree(BT); CreatBiTree_Pre(BT); //PreOrder_NRe(BT); InOrder_NRe(BT); InOrder_Re(BT); cout<<endl; PreOrder_NRe(BT); PreOrder_Re(BT); cout<<endl; }
相关文章推荐
- 数据结构之C/C++实现二叉树的链式存储
- [数据结构]程杰队列的链式存储结构及实现代码
- 数据结构之线性表――链式存储结构之单链表(php代码实现)
- C++学习总结——顺序存储,链式存储,索引存储,哈希存储的优缺点,以及vector数组,list链表,十字链表,索引结构,hash表的实现
- 【线性表一:】两种存储结构的代码实现:顺序存储和链式存储
- C++中实现队列类链式存储与栈类链式存储的代码示例
- 线性结构的顺序存储和链式存储的实现代码(一)
- 数据结构与算 5:C++ 顺序/链式存储,栈 模板类实现,编译模板类问题解决
- 树和二叉树的存储结构的实现(C/C++实现)
- 二叉树的链式存储结构 前序 后序 中序 层序遍历操作实现 判断是否完全二叉树
- 二叉树链式结构C代码实现
- 数据结构之线性表代码实现顺序存储,链式存储,静态链表(选自大话数据结构)
- 线性结构的顺序存储和链式存储的实现代码(二)
- C++实现队列之链式存储结构
- 数据学习之线性表的链式存储C++实现
- 数据结构学习之堆栈的链式存储C++实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构学习之队列的链式存储的C++实现
- Java基础 - 栈的链式存储结构及实现
- 线性结构 -- 连续存储(数组), 1个简单的c语言代码实现.