数据结构之二叉树
思路:
采用先序存储,让后用三种遍历方式,进行遍历。在创建二叉树的时候,要注意:在每个叶子节点后,输入两次终止符(这里把“/”作为终止符)。在建立二叉树的时候,保证指向根节点的指针不变。还有一个指向当前位置的的指针,以及申请内存是的临时指针。中序遍历过程中,要用到栈。在这里就简单的使用了 STL容器。
下面是我给出的一段代码,仅供参考!
#include<iostream>
#include<stdlib.h>
#include<stack>
using namespace std;
typedef struct treenode
{
char data;
struct treenode *lchild,*rchild;
}node,*bitree;
stack<char>s;
bitree createtree(bitree bt,int k)
{
char ch;
bitree q;
q = (node*)malloc(sizeof(node));
cout<<"请输入字符( / 表示空):"<<endl;
cin>>ch;
if(ch!='/')
{
if(!(q = (node*)malloc(sizeof(node))))
exit(0);
q->data = ch;
q->lchild=NULL;
q->rchild=NULL;
if(k==0)
bt=q;
if(k==1)
bt->lchild=q;
if(k==2)
bt->rchild=q;
createtree(q,1);//建立左子树
createtree(q,2);//建立右子树
}
return (bt);
}
//先序遍历
int visit1(struct treenode *bt)
{
if(bt!=NULL)
{
cout<<bt->data;
visit1(bt->lchild);
visit1(bt->rchild);
}
return 0;
}
//中序遍历。
int visit2(struct treenode *bt)
{
if(bt!=NULL)
{
s.push(bt->data);
visit2(bt->lchild);
cout<<s.top();
s.pop();
visit2(bt->rchild);
}
return 0;
}
//后序遍历
int visit3(struct treenode *bt)
{
if(bt!=NULL)
{
visit3(bt->lchild);
visit3(bt->rchild);
cout<<bt->data;
}
return 0;
}
int main()
{
bitree p;
int temp;
p=(bitree)malloc(sizeof(node));
p=createtree(p,0);
cout<<"_____请做出如何遍历的选择____"<<endl;
cout<<"_____1 先序遍历 ____"<<endl;
cout<<"_____2 中序遍历 ____"<<endl;
cout<<"_____3 后序遍历 ____"<<endl;
cout<<"_____4 退出程序 ____"<<endl;
while(1)
{
cin>>temp;
if(temp!=4)
switch (temp)
{
case 1:
visit1(p);
break;
case 2:
visit2(p);
break;
case 3:
visit3(p);
break;
default:
break;
}
else
break;
cout<<endl;
}
return 0;
}
对于树:
a
/ \
b e
/ \
c d
输入以及运行结果截图
如下: