标签:
比如输入的二叉树是
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 }
标签:
原文地址:http://www.cnblogs.com/hslzju/p/5730075.html