当前位置:   article > 正文

DS二叉树--层次遍历

ds二叉树--层次遍历

这里要求用队列实现,反而好做点,输出头节点的数据,然后他就该出队了

然后他的左右孩子进队列

看看深大灵魂画手的作品

 

 

 

 

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. class BiTreeNode{
  4. public:
  5. char date;
  6. BiTreeNode *leftchild;
  7. BiTreeNode *rightchild;
  8. };
  9. class BiTree{
  10. private:
  11. BiTreeNode *Root; //根节点指针
  12. int pos;
  13. string strTree;
  14. BiTreeNode *CreateBirtree();
  15. public:
  16. void CreateTree(string TreeArray);//利用先序遍历结果创建二叉树
  17. void LevelOrder(){LevelOrder(Root);}
  18. void LevelOrder(BiTreeNode *t);
  19. };
  20. //构造二叉树,利用先序遍历结果创建树
  21. void BiTree::CreateTree(string TreeArray){
  22. pos=0;
  23. strTree.assign(TreeArray);
  24. Root=CreateBirtree();
  25. }
  26. //递归建树,私有函数,类内实现
  27. BiTreeNode* BiTree::CreateBirtree(){
  28. BiTreeNode *T;
  29. char ch;
  30. ch=strTree[pos++];
  31. int flag=0;
  32. if(ch=='0') T=NULL;
  33. else{
  34. T=new BiTreeNode();
  35. T->date=ch;// 生成根节点
  36. T->leftchild=CreateBirtree();// 构造左子树
  37. T->rightchild=CreateBirtree();//构造右子树
  38. }
  39. return T;
  40. }
  41. //定义层次遍历函数
  42. void BiTree::LevelOrder(BiTreeNode* t) {
  43. //用队列实现
  44. queue<BiTreeNode*> tq;
  45. BiTreeNode *p;
  46. tq.push(t);
  47. while(!tq.empty()) {
  48. p=tq.front();//p代表头节点
  49. cout<<p->date;//输出头节点数据
  50. if(p->leftchild)//分别判断防止没孩子
  51. tq.push(p->leftchild);//有孩子则按左右顺序进队列
  52. if(p->rightchild)
  53. tq.push(p->rightchild);
  54. tq.pop();
  55. }
  56. }
  57. int main()
  58. {
  59. //输入t,表示有t个字符串输入
  60. int t;cin>>t;
  61. for (int i = 0; i < t; ++i) {
  62. string str; cin>>str;
  63. BiTree *tree;
  64. tree=new BiTree();
  65. tree->CreateTree(str);
  66. tree->LevelOrder();
  67. cout<<endl;
  68. }
  69. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/232941
推荐阅读
相关标签
  

闽ICP备14008679号