算法编程题1-二叉树的按层遍历(含换行)
来源:互联网 发布:家具有味怎么办知乎 编辑:程序博客网 时间:2024/06/15 20:11
题型:二叉树的按层遍历
1.针对二叉树的宽度优先遍历
2.宽度优先遍历常使用队列结构
3.面试中,改题目经常对换行有所要求
具体实例:
给定一棵二叉树的头结点head,请按照大家现在看到的方式打印
1
2 3
4 5 6
7 8
此题的思考点在于如何打印换行
用两个变量来解决问题:
last:表示正在打印的当前行的最右节点
nlast:表示下一行的最右节点
所以,采用宽度优先遍历的方式来遍历二叉树,当遍历的点为last所指向的节点时,打印换行,使得last = nlast。
现在,我们的问题变为了如何正确更新last和nlast 的值
正确方法是:nlast始终指向最新进入队列的节点
以上题实例为例:
- last指向1节点,1节点进入队列,nlast指向1节点
- 检查队列是否为空,若是,则跳出循环,结束打印。否则队头节点出队列,打印节点
- 检查当前打印的节点是否有左孩子,若有,进入队列,使得nlast指向这个左孩子
- 检查当前打印的节点是否有右孩子,若有,进入队列,使得nlast指向这个右孩子
- 检查当前打印的节点是否是last指向的节点,若是,打印换行,更新last节点 last = nlast
- 进入第二步
代码如下:
#include<iostream>#include<queue>using namespace std;struct node{node(int num){data = num;left = NULL;right = NULL;}int data;struct node *left;struct node *right;};int main(){//创建二叉树node elem1 = node(1);node elem2 = node(2);node elem3 = node(3);node elem4 = node(4);node elem5 = node(5);node elem6 = node(6);node elem7 = node(7);node elem8 = node(8);elem1.left = &elem2;elem1.right = &elem3;elem2.left = &elem4;elem3.left = &elem5;elem3.right = &elem6;elem5.left = &elem7;elem5.right = &elem8;node *last = NULL; //指向正在打印的当前行的最右行节点node *nlast = NULL; //指向下一行的最右节点node * p = NULL;queue<node*> qu; //定义队列sk用于宽度优先遍历last = &elem1;qu.push(&elem1); //把节点1入队列nlast = &elem1;while (!qu.empty()){p = qu.front();qu.pop(); //取队头节点出队列cout << p->data; //打印节点//检测当前打印节点是否有左孩子,若有,入队列,更新nlastif (NULL != p->left){qu.push(p->left);nlast = p->left;}//检测当前打印节点是否有右孩子,若有,入队列,更新nlastif (NULL != p->right){qu.push(p->right);nlast = p->right;}if (p == last) //检查当前节点是否是last指向的节点,若是,打印换行,更新last{cout << endl;last = nlast;}}return 0;}
阅读全文
1 0
- 算法编程题1-二叉树的按层遍历(含换行)
- 二叉树的按层遍历并实现换行
- 二叉树的层序遍历算法
- 【数据结构与算法】二叉树的遍历(递归遍历、非递归遍历、层序遍历)
- 二叉树及按层遍历的算法实现
- 递归按层遍历二叉树算法
- 【算法】二叉树遍历(层序)
- 按层Z型遍历二叉树(算法)
- 二叉树的遍历(层遍历和深度遍历)
- 二叉树的按层遍历
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构与算法】二叉树的层序遍历
- 【数据结构&算法】二叉树的层序遍历
- 算法题目-二叉树的层序遍历
- 【数据结构与算法】二叉树的层序遍历
- 二叉树的层遍历
- 程序员面试100题(算法)之层次遍历二叉树(含二叉树前序创建、层次遍历、前序遍历)
- PHP和其他编程语言开发时接收数据的问题
- 思诚开发者沙龙开博啦!
- 并查集 感染者
- MySQL数据库的10大经典错误案例
- KM匹配 hdu2853(模版
- 算法编程题1-二叉树的按层遍历(含换行)
- 优秀程序员眼中的整洁代码
- 正则表达式的基本用法
- 8.3 E
- Nodejs笔记(1)——ECMAScript
- jdk获取属性名称注意事项
- WebRTC系列(3):PeerConnection通信建立流程
- mybatis 抛出 Mapped Statements collection does not contain value for 异常
- 第三方App接入微信登录 解读