当前位置:   article > 正文

UVA 122 二叉树模拟_二叉树 模拟网站

二叉树 模拟网站


题意:输入一棵二叉树,层序遍历输出二叉树的节点值,结点规模256,如果有结点没有被赋值或者被赋2次以上的值,则输出not complete(照着书做的时候书上输出-1导致程序一直WA)

使用数组模拟二叉树更加简单和方便

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<cstdio>
  5. #include<vector>
  6. #include<stack>
  7. #include<queue>
  8. #include<algorithm>
  9. #include<sstream>
  10. #define inf 0x3f3f3f3f
  11. #define ll long long
  12. using namespace std;
  13. const int MAXN=300;
  14. int l[MAXN];//存储左结点
  15. int r[MAXN];//存储右节点
  16. int value[MAXN];//存储节点的值
  17. int flag[MAXN];
  18. int cnt;
  19. int newnode()//建立新节点
  20. {
  21. int u=++cnt;
  22. l[u]=r[u]=0;
  23. flag[u]=0;
  24. return u;
  25. }
  26. int addnode(int v,char *s)
  27. {
  28. int n=strlen(s);
  29. int u=1;
  30. for(int i=0;i<=n-2;i++)
  31. {
  32. if(s[i]=='L')
  33. {
  34. if(l[u]==0)
  35. l[u]=newnode();
  36. u=l[u];
  37. }
  38. else
  39. {
  40. if(r[u]==0)
  41. r[u]=newnode();
  42. u=r[u];
  43. }
  44. }
  45. if(flag[u]==1)
  46. return -1;
  47. flag[u]=1;
  48. value[u]=v;
  49. return 0;
  50. }
  51. void bfs()
  52. {
  53. queue<int> q;
  54. queue<int> qx;
  55. while(!q.empty())
  56. q.pop();
  57. while(!qx.empty())
  58. qx.pop();
  59. q.push(1);
  60. bool ff=0;
  61. while(!q.empty())
  62. {
  63. int t=q.front();
  64. q.pop();
  65. if(flag[t]==0)
  66. {
  67. ff=1;
  68. break;
  69. }
  70. qx.push(value[t]);
  71. if(l[t]!=0)
  72. q.push(l[t]);
  73. if(r[t]!=0)
  74. q.push(r[t]);
  75. }
  76. if(ff==1)
  77. cout<<"not complete"<<endl;
  78. else
  79. {
  80. cout<<qx.front();
  81. qx.pop();
  82. while(!qx.empty())
  83. {
  84. cout<<" "<<qx.front();
  85. qx.pop();
  86. }
  87. cout<<endl;
  88. }
  89. }
  90. int main()
  91. {
  92. char s[MAXN];
  93. while(scanf("%s",s)==1)
  94. {
  95. if(strcmp(s,"()")==0)
  96. continue;
  97. l[1]=r[1]=0;
  98. flag[1]=0;
  99. cnt=1;
  100. int v;
  101. sscanf(&s[1],"%d",&v);
  102. addnode(v,strchr(s,',')+1);
  103. bool f=0;
  104. while(scanf("%s",s))
  105. {
  106. if(strcmp(s,"()")==0)
  107. break;
  108. int v;
  109. sscanf(&s[1],"%d",&v);
  110. int x=addnode(v,strchr(&s[1],',')+1);
  111. if(x==-1)
  112. f=1;
  113. }
  114. if(f==1)
  115. cout<<"not complete"<<endl;
  116. else
  117. bfs();
  118. }
  119. return 0;
  120. }


声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号