二叉树的层序遍历
来源:互联网 发布: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
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉查找树的层序遍历
- 二叉树的层序遍历
- SDUTACM 二叉树的层序遍历
- 二叉树的层序遍历
- 二叉树的层序遍历
- Leetcode038--二叉树的层序遍历
- 数据结构 二叉树的层序遍历
- ubuntu下安装mysql
- js实现继承
- php实现查询数据库返回json数据
- PAT-1014 福尔摩斯的约会
- 设计模式--Decorator
- 二叉树的层序遍历
- Java同步集合
- Apache Cordova + Ionic 环境搭建
- CodeForces 448D Multiplication Table(二分,CodeForces,矩阵中找数字)
- andriod sqlite
- php正则总结
- hdu 懒省事的小明
- ubuntu下安装sogou输入法和consolas字体
- 拓扑排序算法