二叉树的创建及遍历

数据结构之二叉树

    思路: 

  采用先序存储,让后用三种遍历方式,进行遍历。在创建二叉树的时候,要注意:在每个叶子节点后,输入两次终止符(这里把“/”作为终止符)。在建立二叉树的时候,保证指向根节点的指针不变。还有一个指向当前位置的的指针,以及申请内存是的临时指针。中序遍历过程中,要用到栈。在这里就简单的使用了 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
              输入以及运行结果截图 
如下:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值