[LeetCode]102. Binary Tree Level Order Traversal--二叉树层序遍历1
来源:互联网 发布:关于护肤的软件 编辑:程序博客网 时间:2024/06/05 04:04
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).For example:
Given binary tree [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
解法1:利用队列先进先出的特性,先将父节点压入队列内,并依次检查其左右节点,非空则入队列,另外用两个变量记录本层需要遍历的节点数和下一层需要遍历的节点数即可。
/** * 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) { vector<vector<int>> result; if(root == NULL) return result; queue<TreeNode*> q; q.push(root); // root不为空,压入队列 int toBePrint = 1; // 记录本层还需要打印的节点个数 int nextLevel = 0; // 记录下一层的节点个数,每次入队列加1 vector<int> oneLayer; // 单层节点 while(!q.empty()){ TreeNode* pCur = q.front(); q.pop(); oneLayer.push_back(pCur->val); if(pCur->left){ // 左节点不为空,入队列 q.push(pCur->left); ++nextLevel; } if(pCur->right){ // 右结点不为空,入队列 q.push(pCur->right); ++nextLevel; } if(--toBePrint == 0){ // toBePrint 为0,则将oneLayer压入result toBePrint = nextLevel; nextLevel = 0; result.push_back(oneLayer); oneLayer.clear(); // oneLayer清空 } } return result; }};
解法2:利用两个队列分别存储本层节点和下一层结点
/** * 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) { vector<vector<int>> result; queue<TreeNode*> current, next; if(root == NULL) return result; else current.push(root); while (!current.empty()) { vector<int> oneLayer; while (!current.empty()) { TreeNode* pCur = current.front(); current.pop(); oneLayer.push_back(pCur->val); if (pCur->left) next.push(pCur->left); if (pCur->right) next.push(pCur->right); } result.push_back(oneLayer); swap(next, current); // 交换两层节点 } return result; }};
解法3:递归
/** * 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) { vector<vector<int>> result; traverse(root, 1, result); return result; } void traverse(TreeNode* root, int level, vector<vector<int>>& result) { if (root == NULL) return; if (level > result.size()) result.push_back(vector<int>()); result[level-1].push_back(root->val); traverse(root->left, level+1, result); traverse(root->right, level+1, result); }};
阅读全文
0 0
- 【LeetCode】Binary Tree Level Order Traversal--(二叉树层序遍历)
- LeetCode | Binary Tree Level Order Traversal(二叉树层序遍历)
- leetcode-Binary Tree Level Order Traversal 二叉树层序遍历
- leetcode:Binary Tree Level Order Traversal 二叉树层序遍历
- [LeetCode]102. Binary Tree Level Order Traversal--二叉树层序遍历1
- Binary Tree Level Order Traversal 分层遍历二叉树@LeetCode
- Leetcode Binary Tree Level Order Traversal 二叉树分层遍历
- Binary Tree Level Order Traversal(二叉树层序遍历)
- LeetCode | Binary Tree Level Order Traversal II(二叉树层序遍历II)
- 【LeetCode-面试算法经典-Java实现】【102-Binary Tree Level Order Traversal(二叉树层序遍历)】
- LeetCode 102 Binary Tree Level Order Traversal(二叉树层序遍历)
- [LeetCode]107. Binary Tree Level Order Traversal II--二叉树层序遍历2
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- leetCode 102.Binary Tree Level Order Traversal (二叉树水平遍历) 解题思路和方法
- 102.LeetCode 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
- MultiType
- 阻塞非阻塞与同步异步
- 正则隐藏手机号中间4位
- SC ConfigServer配置存储改为MySQL或其他数据库
- linux下安装mysql(CentOS系统为例)
- [LeetCode]102. Binary Tree Level Order Traversal--二叉树层序遍历1
- 数据分析起步
- 欢迎使用CSDN-markdown编辑器
- 一个优秀的Unity3d开发者必备的几种设计模式
- [c++]命名空间
- spring boot 添加aop功能
- 【noip 2015】信息传递
- 浅谈Java中的hashcode方法
- opencv--鼠标与滑动条