LeetCode 102. Binary Tree Level Order Traversal 解题报告
来源:互联网 发布:顾客特殊要求矩阵表 编辑:程序博客网 时间:2024/06/05 12:28
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]
return its level order traversal as:
注意事项
没有明确给出。
解题思路
我的思路:
这道题需要逐层把二叉树的节点值保存起来。其实就是二叉树的层序遍历,使用的是广度优先搜索(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<vector<int>> levelOrder(TreeNode* root) { int curDepth = 0; vector<vector<int>> result; vector<int> temp; queue<pair<TreeNode*, int>> q; if (root) { q.push({root, 0}); while(q.size()) { pair<TreeNode*, int> 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算法题,如果有时间,会另外再做几道相关的题目,继续努力,加油~
- [leetcode] 102. Binary Tree Level Order Traversal 解题报告
- 【LeetCode】102. Binary Tree Level Order Traversal 解题报告
- LeetCode解题报告 102. Binary Tree Level Order Traversal [easy]
- LeetCode 102. Binary Tree Level Order Traversal 解题报告
- [Leetcode] 102. Binary Tree Level Order Traversal 解题报告
- [leetcode]102. Binary Tree Level Order Traversal@Java解题报告
- [LeetCode]Binary Tree Level Order Traversal II,解题报告
- LeetCode-Binary Tree Level Order Traversal-解题报告
- 【LeetCode】Binary Tree Level Order Traversal 解题报告
- 【LeetCode】Binary Tree Level Order Traversal II 解题报告
- 【LeetCode】 Binary Tree Zigzag Level Order Traversal 解题报告
- LeetCode(102) Binary Tree Level Order Traversal解题报告
- LeetCode(103) Binary Tree Zigzag Level Order Traversal解题报告
- LeetCode(107) Binary Tree Level Order Traversal II解题报告
- [leetcode] 107. Binary Tree Level Order Traversal II 解题报告
- [leetcode] 103. Binary Tree Zigzag Level Order Traversal 解题报告
- 【LeetCode】107. Binary Tree Level Order Traversal II 解题报告
- 【LeetCode】103. Binary Tree Zigzag Level Order Traversal 解题报告
- 初学命令
- 计算机启动从bios到操作系统整过程详解
- hibernate注解开发——2.属性级别注解
- Ubuntu16.04忘记登录密码的解决办法。
- YouTube视频下载
- LeetCode 102. Binary Tree Level Order Traversal 解题报告
- React Native API模块BackAndroid自定义返回键事件处理
- 简单扼要的socket
- node.js学习(七、express框架创建api接口)
- Android应用消息通知栏的实现
- JAVA集合框架Collection接口和Map接口主要知识总结
- springmvc 出现寻找js或css文件却返回某个html内容的问题
- 在一组序列中查找两个元素的和等于给定的值(快排+两端扫描实现)
- 欢迎使用CSDN-markdown编辑器