建立二叉树并层序遍历

问题描述:

代码描述:

  1 #include<cstdio>
  2 #include<stdlib.h>
  3 #include<string.h>
  4 #include<queue>
  5 #define MAXN 256
  6 using namespace std;
  7 char s[MAXN+10];
  8 typedef struct Node
  9 {
 10     int h_v;
 11     int v;
 12     struct Node* left;
 13     struct Node* right;
 14 }node,*pt;
 15 
 16 pt Newnode() //建立新节点
 17 {
 18     pt p=(pt)malloc(sizeof(node));
 19     p->h_v=0;
 20     p->left=p->right=NULL;
 21     return p;
 22 }
 23 
 24 pt root=Newnode();
 25 
 26 void addnode(int v,char *s)
 27 {
 28     pt p=root;
 29     int n=strlen(s);
 30     for(int i=0;i<n;i++)
 31     {
 32         if(*(s+i)=='L')
 33         {
 34             if(p->left==NULL) 
 35             {
 36                 p->left=Newnode();
 37             }
 38             p=p->left;
 39         }
 40         else if(*(s+i)=='R')
 41         {
 42             if(p->right==NULL) 
 43             {
 44                 p->right=Newnode();
 45             }
 46             p=p->right;
 47         }
 48     }
 49     if(p->h_v==1)
 50     {
 51         printf("值多次给出错误\n");
 52         return;
 53     }
 54     p->v=v;
 55     p->h_v=1;
 56 }
 57 
 58 void Read_input()
 59 {
 60     while(scanf("%s",&s)==1)
 61     {
 62         if(strcmp(s,"()")==0) break;
 63         int v;
 64         sscanf(s+1,"%d",&v);
 65         addnode(v,strchr(s,',')+1);
 66     }
 67 }
 68 
 69 void BFS(pt root)
 70 {
 71     queue<pt> q;
 72     queue<int> ans;
 73     q.push(root);
 74     pt p;
 75     while(!q.empty())
 76     {
 77         p=q.front();
 78         q.pop();
 79         if(!p->h_v)
 80         {
 81             printf("空值错误\n");   //应题目要求,如果发现有节点没赋值,报错退出
 82             return;
 83         }
 84         ans.push(p->v);
 85         if(p->left) q.push(p->left);
 86         if(p->right) q.push(p->right);
 87     }
 88     while(!ans.empty())
 89     {
 90         printf("%d\t",ans.front());
 91         ans.pop();
 92     }
 93 }
 94 
 95 void release(pt root)                //释放动态内存,以免内存泄漏
 96 {
 97     if(!root) return;
 98     if(root->left) release(root->left);
 99     if(root->right) release(root->right);
100 }
101 
102 int main()
103 {
104     Read_input();
105     BFS(root);
106     release(root);
107     return 0;
108 }

运行结果:

猜你喜欢

转载自www.cnblogs.com/bboykaku/p/12711804.html
今日推荐