二叉树的层序遍历

来源:互联网 发布:airserver激活码 mac 编辑:程序博客网 时间:2024/06/06 12:40

题目要求:二叉树层序遍历,按层打印
思路:(1)遍历:采用队列,每次出队一个节点,每次入队两个节点:分别是出队节点的左右孩子(前提是非空)。队列为空,遍历结束。(2)按层打印:遍历后的结果放在队列中,依次出队,如何判断该层结束?判断出队的值是否等于每层最右节点的值。
c++代码如下:

#include "stdafx.h"#include <iostream>#include <string>#include <queue>using namespace std;struct TreeNode {      int val;      TreeNode *left;      TreeNode *right;      TreeNode(int x) : val(x), left(NULL), right(NULL) {}};void helper(queue<TreeNode *> &q, queue<int> &p){    TreeNode *tmp=q.front();    if(tmp->left!=NULL)        q.push(tmp->left);    if(tmp->right!=NULL)        q.push(tmp->right);    p.push(tmp->val);//存放遍历结果    q.pop();//出队    if(q.empty())//队列为空        return;    helper(q,p);}//二叉树的层序遍历,按层打印void LevelTranversal(TreeNode *node){    queue<TreeNode *> q;//过渡的队列    q.push(node);    queue<int> p;//结果存放队列    helper(q, p);//遍历后存放的队列    TreeNode *nright=node;    while(!p.empty())    {        cout<<p.front()<<' ';        if(nright->val==p.front())        {            cout<<endl;            nright=node->right;        }        p.pop();    }}/*int main(){    TreeNode *l1=new TreeNode(1);    TreeNode *l2=new TreeNode(2);    TreeNode *l3=new TreeNode(3);    l1->left=l2;    l1->right=l3;    LevelTranversal(l1);    delete l1;    delete l2;    delete l3;    return 0;}*/
0 0