树(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
原创粉丝点击