当前位置:   article > 正文

pta——按层次遍历二叉树_7-5 二叉树的层次遍历 分数 15pta

7-5 二叉树的层次遍历 分数 15pta

记录数据结构pta作业

题目

字符串的形式定义一棵二叉树的先序序列,若字符是‘#’, 表示该二叉树是空树,否则该字符是相应结点的数据元素。读入相应先序序列,建立二叉树,然后按层次遍历该二叉树并输出结点数据。

输入格式:

字符串形式的先序序列(即结点的数据类型为单个字符)

输出格式:

按层次遍历二叉树的结果

输入样例:

在这里给出一组输入。例如:

ABDG##HI####CE#J##F##

输出样例:

在这里给出相应的输出。例如:

ABCDEFGHJI

思路

  1. 根据先序序列,用迭代方式构造二叉树
  2. 有数据,赋值给根节点,然后先构造左子树,再构造右子树,
  3. 有数据,赋值给左子树的根节点,然后构造左子树的左子树和右子树,如此递归
  4. 碰到“#”则构造树失败,继续下一个构造。
  5. 借用队列进行层次遍历,pop该值,压入左右孩子,直到队列空

代码

  1. #include<iostream>
  2. #include<string>
  3. #include<queue>
  4. using namespace std;
  5. typedef struct TNode{
  6. char data;
  7. struct TNode *lchild,*rchild;
  8. }TNode,*pTNode;
  9. void creatTree(pTNode &root,string &T,int &start,int end){
  10. if(T[start]!='#'){
  11. root= new TNode;
  12. root->data = T[start];
  13. root->lchild = NULL;
  14. root->rchild = NULL;
  15. creatTree(root->lchild,T,++start,end);
  16. creatTree(root->rchild,T,++start,end);
  17. }
  18. }
  19. void leveltraversal(pTNode &root){
  20. queue <pTNode> q;
  21. pTNode p = root;
  22. q.push(p);
  23. while(!q.empty()){
  24. p = q.front();
  25. q.pop();
  26. cout<<p->data;
  27. if(p->lchild!=NULL){
  28. q.push(p->lchild);
  29. }
  30. if(p->rchild!=NULL){
  31. q.push(p->rchild);
  32. }
  33. }
  34. }
  35. int main(){
  36. string T;
  37. cin>>T;
  38. int st = 0;
  39. int &start = st;
  40. if(T[0]!='#'){
  41. pTNode root = new TNode;
  42. root->data = T[0];
  43. root->lchild = NULL;
  44. root->rchild = NULL;
  45. creatTree(root->lchild,T,++start,T.length());
  46. creatTree(root->rchild,T,++start,T.length());
  47. leveltraversal(root);
  48. }
  49. return 0;
  50. }
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/681789
推荐阅读
相关标签
  

闽ICP备14008679号