您的位置:首页 > 其它

树(3)树的层次遍历

2016-07-16 09:27 330 查看
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。

例如输入

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

起初写代码,忘记取队首元素,出现了死循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  遍历 层次