博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法编程题1-二叉树的按层遍历(含换行)
阅读量:4212 次
发布时间:2019-05-26

本文共 1625 字,大约阅读时间需要 5 分钟。

题型:二叉树的按层遍历

1.针对二叉树的宽度优先遍历

2.宽度优先遍历常使用队列结构

3.面试中,改题目经常对换行有所要求

具体实例:

给定一棵二叉树的头结点head,请按照大家现在看到的方式打印

1

2 3

4 5 6

7 8

此题的思考点在于如何打印换行

用两个变量来解决问题:

  last:表示正在打印的当前行的最右节点

nlast:表示下一行的最右节点

所以,采用宽度优先遍历的方式来遍历二叉树,当遍历的点为last所指向的节点时,打印换行,使得last = nlast。

现在,我们的问题变为了如何正确更新last和nlast 的值

正确方法是:nlast始终指向最新进入队列的节点

以上题实例为例:

  1. last指向1节点,1节点进入队列,nlast指向1节点
  2. 检查队列是否为空,若是,则跳出循环,结束打印。否则队头节点出队列,打印节点
  3. 检查当前打印的节点是否有左孩子,若有,进入队列,使得nlast指向这个左孩子
  4. 检查当前打印的节点是否有右孩子,若有,进入队列,使得nlast指向这个右孩子
  5. 检查当前打印的节点是否是last指向的节点,若是,打印换行,更新last节点 last  = nlast
  6. 进入第二步

代码如下:

#include
#include
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
qu; //定义队列sk用于宽度优先遍历 last = &elem1; qu.push(&elem1); //把节点1入队列 nlast = &elem1; while (!qu.empty()) { p = qu.front(); qu.pop(); //取队头节点出队列 cout << p->data; //打印节点 //检测当前打印节点是否有左孩子,若有,入队列,更新nlast if (NULL != p->left) { qu.push(p->left); nlast = p->left; } //检测当前打印节点是否有右孩子,若有,入队列,更新nlast if (NULL != p->right) { qu.push(p->right); nlast = p->right; } if (p == last) //检查当前节点是否是last指向的节点,若是,打印换行,更新last { cout << endl; last = nlast; } } return 0;}

你可能感兴趣的文章
关于sd卡中一些概念的理解
查看>>
SD卡图形介绍
查看>>
linux MISC 驱动模型分析
查看>>
马达 vibrator的android的timed_output实现方式
查看>>
linux kernel panic解决思路
查看>>
定位Oops的具体代码行分析死机日志的方法
查看>>
Linux kernel oops panic 调试技巧
查看>>
sd是否在位检查
查看>>
关于USB Gadget开发
查看>>
tofel词汇
查看>>
jellybean的suspend策略变动
查看>>
Android linux的休眠和唤醒
查看>>
高通msm8x60 boot(lk)的usb处理解析流程
查看>>
MSM8260 EHCI-MSM72k主控制器的状态机迁移分析
查看>>
MSM8x60 OTG之设备控制器流程分析
查看>>
MSM8X60 USB控制器流程分析
查看>>
sd卡驱动分析之card
查看>>
sd卡驱动分析之core
查看>>
sd卡驱动分析之host
查看>>
sd卡驱动分析之相关硬件操作和总结
查看>>