树(3)树的层次遍历
来源:互联网 发布:杜兰特投敌知乎 编辑:程序博客网 时间:2024/04/29 10:02
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。
例如输入
8
/ /
6 10
/ / / /
5 7 9 11
输出8 6 10 5 7 9 11。
代码如下:
#include<iostream>#include<queue>using namespace std;struct bstNode{ bstNode *pLeft; bstNode *pRight; int value;};void createTree(bstNode *&pRoot){ bstNode *root = pRoot; int val; cin >> val; if (val == -1) root = NULL; else { pRoot = (bstNode *)malloc(sizeof(pRoot)); pRoot->value = val; createTree(pRoot->pLeft); createTree(pRoot->pRight); }}void destroy(bstNode *&pRoot){ if (pRoot != NULL) { destroy(pRoot->pLeft); destroy(pRoot->pRight); free(pRoot); }}int preOrder(bstNode *pRoot){ if (pRoot != NULL) { cout << pRoot->value << " "; preOrder(pRoot->pLeft); preOrder(pRoot->pRight); }}void levelOrder(bstNode *pRoot){ if (pRoot == NULL) return ; queue<bstNode *> que; que.push(pRoot); bstNode *root; while (!que.empty()) { root = que.front();//取队首元素,这样后面才能逐层进行下去 cout << root->value<<" "; que.pop();//必须出队列 if (root->pLeft != NULL) que.push(root->pLeft); if (root->pLeft != NULL) que.push(root->pRight); }}int main(){ bstNode *p = NULL; createTree(p); preOrder(p); cout << endl; levelOrder(p); cout << endl; destroy(p); return 0;}
运行结果如下:(centos5.5)
[root@localhost c++]# ./a.out
8 6 5 -1 -1 7 -1 -1 10 9 -1 -1 11 -1 -1
8 6 5 7 10 9 11
8 6 10 5 7 9 11
起初写代码,忘记取队首元素,出现了死循环
0 0
- 树的层次遍历
- 树的层次遍历
- 树的层次遍历
- 树的层次遍历
- 树的层次遍历
- 树的层次遍历
- 树的层次遍历
- 树(3)树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历
- 二叉树的层次遍历!!!
- ubuntu12.04安装中文输入法
- junit基本介绍
- C++随机选择的实现 rand函数和rand_r
- Mat转Iplimage
- js获取url参数
- 树(3)树的层次遍历
- 1.Toolbar
- Jquery弹出层效果
- 快递查询API调用,获得物流单号的跟踪信息
- Sql Server-Alter
- C++ 静态成员初始化
- HTTP协议
- js传递参数 中文
- Web前端学习笔记1-1-1