二叉树逐行打印,同时打印每行时需要换行
2016-02-03 14:26
274 查看
二叉树逐层遍历
依靠一个队列先进后出的特点进行算法设计如下:
但是如果在按层打印的同时,还需要每行都输出一个换行符呢?这样的话,只需要一个额外的变量就可以了,这个变量用于记录队列中当前层节点的数目A,当A为0时就需要打印换行符了。代码如下:
依靠一个队列先进后出的特点进行算法设计如下:
<span style="font-size:18px;">void BinaryTreeTraversal(const BinaryTreeNode* head) { if(head==NULL) return; Queue<BinaryTreeNode*> queue; queue.push(head); while (queue.size()!=0) { BinaryTreeNode* aNode = queue.pop(); //打印aNode; if(aNode->left) queue.push(aNode->left); if(aNode->right) queue.push(aNode->right); } }</span>
但是如果在按层打印的同时,还需要每行都输出一个换行符呢?这样的话,只需要一个额外的变量就可以了,这个变量用于记录队列中当前层节点的数目A,当A为0时就需要打印换行符了。代码如下:
void BinaryTreeTraversal(const BinaryTreeNode* head) { if(head==NULL) return; int cerrentLevelNodeNum=0; Queue<BinaryTreeNode*> queue; queue.push(head); cerrentLevelNodeNum=queue.size(); while (queue.size()!=0) { //更新cerrentLevelNodeNum if(cerrentLevelNodeNum==0) { cerrentLevelNodeNum=queue.size(); } BinaryTreeNode* aNode = queue.pop(); //这里打印输出aNode节点信息 cerrentLevelNodeNum--; if(cerrentLevelNodeNum==0) { //打印换行符 } if(aNode->left) queue.push(aNode->left); if(aNode->right) queue.push(aNode->right); } }
相关文章推荐
- Android 网络框架学习之Retrofit
- mysql-5.7.10-winx64免安装版配置时碰到的问题
- centos7上编译openjdk
- Junit单元测试
- torch安装
- 华罗庚“统筹方法”的局限性——节约时间需要注意的问题
- (28)Cocos2d-x xml解析
- (27)Cocos2d-x 3.0 Json用法
- GeoTools-Swing显示原理
- Java观察者设计模式详解
- HDU——1027Ignatius and the Princess II(next_permutation函数)
- 【物联网】OpenWrt编译出现Unable to find remote helper for 'https'问题
- [算法学习]输入遍历重建二叉树
- C#设计模式——适配器模式
- php empty()和isset()的区别
- BZOJ 3875: [Ahoi2014]骑士游戏
- springMVC导出 CSV案例
- (26)SQLite集成与用法
- 新浪微博JAVA API入门
- NoSQL 之 Morphia 操作 MongoDB