zoukankan      html  css  js  c++  java
  • 层序遍历打印二叉树

    比如输入的二叉树是

                E

      D             G

    A  B  C  F

    要求打印出的结果是

    E

    D G

    A B C F

    字母之间用空格隔开,不同层用换行隔开。

     1 #include <iostream>
     2 #include <vector>
     3 #include <string>
     4 #include <queue>
     5 #include <stack>
     6 #include <unordered_map>
     7 #include <map>
     8 #include <algorithm>
     9 using namespace std;
    10 
    11 struct TreeNode {
    12     char val;
    13     struct TreeNode *left;
    14     struct TreeNode *right;
    15     TreeNode(char x) : val(x), left(NULL), right(NULL) {}
    16 };
    17 
    18 //以前序遍历创建二叉树
    19 void CreateBiTree(TreeNode **T)//*T是指向BiTNode的指针
    20 {
    21     *T = new TreeNode(0);
    22     if (*T == NULL)//如果*T还是指向NULL,表示内存分配失败,退出程序
    23         exit(OVERFLOW);
    24     char ch;
    25     cin >> ch;
    26     if (ch == '#')
    27         *T = NULL;
    28     else
    29     {
    30         (*T)->val = ch;//*T指向的节点的data分配内容,即生成根节点
    31         CreateBiTree(&((*T)->left));//创建&(*T)->lchild临时变量,传入CreateBiTree,构造左子树
    32         CreateBiTree(&((*T)->right));//创建&(*T)->rchild临时变量,传入CreateBiTree,构造右子树
    33     }
    34 }
    35 
    36 //层序遍历打印二叉树
    37 void order(TreeNode* root)
    38 {
    39     if(root == nullptr)
    40         return;
    41 
    42     queue<pair<TreeNode*,int>> que;
    43     que.push(make_pair(root,1));
    44     int curLevel=1;
    45 
    46     while(!que.empty())
    47     {
    48         TreeNode *temp=que.front().first;
    49         int id = que.front().second;
    50         if(id != curLevel)
    51         {
    52             cout << endl;
    53             curLevel = id;
    54         }
    55         cout << temp->val << " ";
    56         if (temp->left)
    57         {
    58             que.push(make_pair(temp->left,id+1));
    59         }
    60         if (temp->right)
    61         {
    62             que.push(make_pair(temp->right,id+1));
    63         }
    64         que.pop();
    65     }
    66     return;
    67 }
    68 
    69 //测试
    70 int main()
    71 {
    72     TreeNode **pp;//定义指向BiTNode的二级指针pp
    73     TreeNode *p;//定义指向BiTNode的指针p
    74     pp = &p;//pp指向p
    75     p = NULL;//初始化p指向NULL
    76     CreateBiTree(pp);//传入指向p的地址,创建二叉树,输入EDA##B##GC##F##
    77     order(p);
    78 }
  • 相关阅读:
    C++虚函数表解析(转)
    学习网址
    css 段落文字换行问题
    移动端fixed兼容问题
    半数集1
    汇编寄存器
    设计模式概述
    Vector用法介绍
    汇编PC硬件基本特征
    android 反编译总结
  • 原文地址:https://www.cnblogs.com/hslzju/p/5730075.html
Copyright © 2011-2022 走看看