层序遍历打印二叉树

比如输入的二叉树是

            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 }
原文地址:https://www.cnblogs.com/hslzju/p/5730075.html