LeetCode OJ: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,#,#,15,7},
3
/ \
9 20
/ \
15 7
return its level order traversal as:
[
[3],
[9,20],
[15,7]
]
层序遍历,既可以用dfs实现也可以用bfs实现,用bfs实现的时候应该借助队列,代码如下:
dfs:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
dfs(root, );
return ret;
}
void dfs(TreeNode * root, int dep)
{
if(!root) return;
if(dep < ret.size()){
ret[dep].push_back(root->val);
}else{
vector<int> tmp;
tmp.push_back(root->val);
ret.push_back(tmp);
}
dfs(root->left, dep+);
dfs(root->right, dep+);
}
private:
vector<vector<int>> ret;
};
bfs:
class Solution {
private:
struct Node{
TreeNode * treeNode;
int level;
Node(){}
Node(TreeNode * node, int lv)
:treeNode(node), level(lv){}
};
public:
vector<vector<int>> levelOrder(TreeNode* root) {
queue<Node> nodeQueue;
vector<vector<int>> ret;
if(root == NULL)
return ret;
nodeQueue.push(Node(root, ));
int dep = -;
while(!nodeQueue.empty()){
Node node = nodeQueue.front();
if(node.treeNode->left)
nodeQueue.push(Node(node.treeNode->left, node.level + ));
if(node.treeNode->right)
nodeQueue.push(Node(node.treeNode->right, node.level + ));
if(dep == node.level)
ret[dep].push_back(node.treeNode->val);
else{
vector<int> tmp;
dep++;
ret.push_back(tmp);
ret[dep].push_back(node.treeNode->val);
}
nodeQueue.pop();
}
return ret;
}
};
java版本的如下所示,同样的包括dfs以及bfs:
public class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> ret = new ArrayList<List<Integer>>();
dfs(ret, root);
return ret;
}
public void dfs(List<List<Integer>> ret, int dep, TreeNode root){
if(root == null)
return;
if(dep < ret.size()){
ret.get(i).add(root.val);
}else{
List<Integer> tmp = new ArrayList<Integer>();
tmp.add(root.val);
ret.add(tmp);
}
dfs(ret, dep+1, root.left);
dfs(ret, dep+1, root.right);
}
}
下面的是bfs,稍微麻烦一点,需要自己再创造一个数据结构,代码如下:
public class Solution {
public class Node{
int level;
TreeNode node;
Node(TreeNode n, int l){
level = l;
node = n;
}
}
public List<List<Integer>> levelOrder(TreeNode root) {
int dep = -1;
List<List<Integer>> ret = new ArrayList<List<Integer>>();
Queue<Node> queue = new LinkedList<Node>();
queue.add(new Node(root, 0));
while(!queue.isEmpty()){
Node n = queue.poll();
if(n.node == null) continue;
if(dep < n.level){
List<Integer> tmp = new ArrayList<Integer>();
tmp.add(n.node.val);
ret.add(tmp);
dep++;
}else{
ret.get(dep).add(n.node.val);
}
if(n.node.left != null) queue.add(new Node(n.node.left, n.level + 1));
if(n.node.right != null) queue.add(new Node(n.node.right, n.level + 1));
}
return ret;
}
}
LeetCode OJ:Binary Tree Level Order Traversal(二叉树的层序遍历)的更多相关文章
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- 【LeetCode】102. Binary Tree Level Order Traversal 二叉树的层序遍历 (Python&C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 BFS DFS 日期 题目地址:https://lee ...
- LeetCode 102. Binary Tree Level Order Traversal 二叉树的层次遍历 C++
Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...
- leetcode 102.Binary Tree Level Order Traversal 二叉树的层次遍历
基础为用队列实现二叉树的层序遍历,本题变体是分别存储某一层的元素,那么只要知道,每一层的元素都是上一层的子元素,那么只要在while循环里面加个for循环,将当前队列的值(即本层元素)全部访问后再执行 ...
- 【LeetCode】Binary Tree Level Order Traversal(二叉树的层次遍历)
这道题是LeetCode里的第102道题. 题目要求: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15 ...
- [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, ...
- [LeetCode] 314. Binary Tree Vertical Order Traversal 二叉树的垂直遍历
Given a binary tree, return the vertical order traversal of its nodes' values. (ie, from top to bott ...
- LeetCode 102. Binary Tree Level Order Traversal02. 二叉树的层次遍历 (C++)
题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...
- Binary Tree Level Order Traversal II(层序遍历2)
Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left ...
- Leetcode 102 Binary Tree Level Order Traversal 二叉树+BFS
二叉树的层次遍历 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * ...
随机推荐
- (转)js原生自定义事件的触发dispatchEvent
1. 对于标准浏览器,其提供了可供元素触发的方法:element.dispatchEvent(). 不过,在使用该方法之前,我们还需要做其他两件事,及创建和初始化.因此,总结说来就是: 1 2 3 d ...
- 3.7 基于51单片机+MC20的路径显示【使用STC15W内核】
需要准备的硬件 MC20开发板 1个 https://item.taobao.com/item.htm?id=562661881042 GSM/GPRS天线 1根 https://item.taoba ...
- 曾经遇到的坑------href="#"和href="javascript:void(0);"、href="javascript:;"
这个是为了 在点击此链接后回到页首,如果你写href="#"那么点击后会回到页首,这样影响操作. <a href="javascript:void 0" ...
- iOS 认识runtime 中的三个指针 isa , IMP , SEL
runtime中函数调用经常被提及的三个概念 isa,IMP,SEL 一 isa:是类指针,之所以说isa是指针是因为Class其实是一个指向objc_class结构体的指针,而isa 是它唯一的私 ...
- grep的若干用法
查找包含server或者client的行 egrep 'server|client' file-name /usr/xpg4/bin/grep -E 'server|client' file-name ...
- 使用bedtools的一个问题
问题:有两个平行测序样本,分别得到1.vcf和2.vcf两个文件,想知道这两个文件有多少个重合点. [wangjq@mgmt CHG029194]$ cat t1 chr1 10 10 chr1 11 ...
- 八、linux优化一
1.关闭selinux sed –I ‘s#SELINUX=enforcing#SELINUX=disabled#g’ /etc/selinux/config grep SELINUX=disable ...
- linux输入子系统简述【转】
本文转载自:http://blog.csdn.net/xubin341719/article/details/7678035 1,linux输入子系统简述 其实驱动这部分大多还是转载别人的,linux ...
- Web项目java.lang.OutOfMemoryError: PermGen space异常解决
接手一个新的Web项目,编译运行(Tomcat版本为7),运行的时候报出了java.lang.OutOfMemoryError: PermGen space的异常,搜了一下这样解释: PermGe ...
- linux基础(10)-导航菜单
导航菜单实战 例:编写一个shell脚本,包含多个菜单,其中需要一个退出选项:可单选也可多选:根据序号选择后,显示所选菜单名称. #!/bin/bash ####################### ...