二叉树的存储

#include<iostream>
#define MaxSize 30
using namespace std;

typedef char elemtype;
typedef struct node
{
 elemtype data;
 struct node *left,*right;
}BTree;

BTree *create(char *str)
{
 BTree *b,*stack[MaxSize],*p,*q=NULL;
 int top=0,k,j=0;
 char ch;
 ch=str[j];
 if(ch!='\0')根节点
 {
  p=(BTree *)malloc(sizeof(BTree));
  p->data=ch;
  b=p;
  p->left=p->right=NULL;
  stack[top]=p;
 }
 j=1;
 while(str[j]!='\0')
 {
  ch=str[j];
  switch(ch)
  {
  case '(':
   top++;
   stack[top]=p;
   k=1;
   break;
  case ')':
   top--;
   break;
  case ',':
   k=2;
   break;
  default:
   p=(BTree *)malloc(sizeof(BTree));
      p->data=ch;
      p->right=p->left=NULL;
   switch(k)
   {
   case 1:///左孩子
    stack[top]->left=p;
    break;
   case 2:/右孩子
    stack[top]->right=p;
    break;
   }
  }
  j++;
 }
 return b;
}
void print(BTree *b)
{
 BTree *p=b;
 if(p!=NULL)
 {
 cout<<p->data;
 if(p->left!=NULL || p->right!=NULL)
 {
  cout<<"(";
  print(p->left);
  if(p->right!=NULL)
   cout<<",";
  print(p->right);
  cout<<")";
 }
 }
}

void main()
{
 BTree *b;
 b=create("a(b(,n(l,p)),g)");
 print(b);
}


 

 

这个算法看起来很简单,起初看到书上是这么写的买单时我觉得不太对,就自己改写,改了整整一天,总是有问题,本来想随便写写算了,但是还是花了一天的时间,还算可以,虽然说最后还是跟书上的写的完全一样了差不多,但是总算是我自己想明白了。也算是一点收获吧!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值