博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LeetCode 102. Binary Tree Level Order Traversal 解题报告
阅读量:2359 次
发布时间:2019-05-10

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

LeetCode 102. Binary Tree Level Order Traversal 解题报告

题目描述

Given a binary tree, return the level order traversal of its nodes’ values. (ie, from left to right, level by level).


示例

Example 1:

Given binary tree [3,9,20,null,null,15,7]
input
return its level order traversal as:
output


注意事项

没有明确给出。


解题思路

我的思路:

这道题需要逐层把二叉树的节点值保存起来。其实就是二叉树的层序遍历,使用的是广度优先搜索(Breadth First Search, BFS)。由于需要逐层保存节点的值,所以遍历时额外维护一个深度信息,表示目前访问到的层数,一旦出现目前访问层数小于节点层数,就表示开始下一层的遍历,此时需要把上一层的节点信息保存到结果中。实现方式是普通的BFS,使用队列保存待访问到的节点,每次取出队列头部的节点进行访问,并在有子节点的情况下,将子节点入队,在队列为空时结束遍历。见下面的实现代码。

另一道题LeetCode 107. Binary Tree Level Order Traversal II是要以相反的顺序保存各层的节点值,即先保存最底层的节点值,最后保存根节点的值,只要在这道题的代码中加入一句reverse(result.begin(), result.end())就能通过。


代码

我的代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector
> levelOrder(TreeNode* root) { int curDepth = 0; vector
> result; vector
temp; queue
> q; if (root) { q.push({root, 0}); while(q.size()) { pair
cur = q.front(); q.pop(); if (curDepth < cur.second) { result.push_back(temp); temp.clear(); curDepth = cur.second; } temp.push_back((cur.first)->val); if ((cur.first)->left) q.push({(cur.first)->left, curDepth + 1}); if ((cur.first)->right) q.push({(cur.first)->right, curDepth + 1}); } result.push_back(temp); } return result; }};

总结

这道题是使用广度优先搜索,实现方式是使用队列,由于需要判别是否到达下一层,所以需要额外维护一个深度信息,最后只要注意循环结束后要把最后一层的杰电子也添加到结果中就基本能通过。

完成这周的BFS算法题,如果有时间,会另外再做几道相关的题目,继续努力,加油~

你可能感兴趣的文章
Gartner:阿里云位列全球云数据库市场份额前三,数据库未来需上云
查看>>
深入解读 Knative Eventing 0.7 版本新特性
查看>>
OpenKruise - 云原生应用自动化引擎正式开源
查看>>
数据人看Feed流-架构实践
查看>>
K8S环境中NAS卷添加noresvport方法
查看>>
使用Quick BI连接AnalyticDB for PostgreSQL数据源
查看>>
开源背后 | 面对端侧推理引擎的挑战,阿里工程师如何应对?
查看>>
容器十年 ——一部软件交付编年史
查看>>
MaxCompute 项目子账号做权限管理
查看>>
面向未来的黑科技——UI2CODE闲鱼基于图片生成跨端代码
查看>>
蚂蚁金服胡喜:金融服务将成为开源的下个前沿领域
查看>>
如何带领团队“攻城略地”?优秀的架构师这样做
查看>>
云原生应用 Kubernetes 监控与弹性实践
查看>>
就是要你懂负载均衡--lvs和转发模式
查看>>
阿里云OSS同城冗余存储正式商业化,提供云上同城容灾能力
查看>>
OSS跨同城3AZ重磅发布,构造全面数据保护体系
查看>>
阿里云OSS同城冗余存储技术解析
查看>>
JVM-SANDBOX:从阿里精准测试走出的开源贡献奖
查看>>
EMR Spark Runtime Filter性能优化
查看>>
分布式服务架构下的混沌工程实践
查看>>