Leetcode038--二叉树的层序遍历
2017-03-06 14:07
337 查看
一、原题
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},
2
3
4
5
1
2
3
4
5
return its level order traversal as:
一、中文
给定一个二叉树,输出它的每一层的结点。
上面的题目中给的就有例子,还是比较好理解的
使用两个队列的方式,队列是先进先出的,所以我们这里使用两个队列,一个队列存储当前层的二叉树结点,另外一个队列来存储下一层的结点,然后将当前层的左右子结点按照顺序放入下一层中,处理完下一层之后将本层和下一层进行一个互换的操作。
----------------------------------------output-------------------------------------------
For example:
Given binary tree {3,9,20,#,#,15,7},
3 / \ 9 20 / \ 15 71
2
3
4
5
1
2
3
4
5
return its level order traversal as:
[ [3], [9,20], [15,7] ]
一、中文
给定一个二叉树,输出它的每一层的结点。
三、举例
上面的题目中给的就有例子,还是比较好理解的
四、思路
使用两个队列的方式,队列是先进先出的,所以我们这里使用两个队列,一个队列存储当前层的二叉树结点,另外一个队列来存储下一层的结点,然后将当前层的左右子结点按照顺序放入下一层中,处理完下一层之后将本层和下一层进行一个互换的操作。
五、程序
package code; import java.util.Deque; import java.util.Iterator; import java.util.LinkedList; //class TreeNode{ // int val; // TreeNode left; // TreeNode right; // TreeNode(int x){ // val = x; // } //} public class LeetCode51{ public static void main(String args[]){ TreeNode n1 = new TreeNode(1); TreeNode n2 = new TreeNode(2); TreeNode n3 = new TreeNode(2); TreeNode n4 = new TreeNode(3); TreeNode n5 = new TreeNode(4); TreeNode n6 = new TreeNode(3); TreeNode n7 = new TreeNode(4); n1.left = n2; n1.right = n3; n2.left = n4; n2.right = n5; n3.left = n7; n3.right = n6; LinkedList<LinkedList<Integer>> res = levelOrder(n1); Iterator<LinkedList<Integer>> it1 = res.iterator(); while(it1.hasNext()){ Iterator<Integer> it2 = it1.next().iterator(); while(it2.hasNext()){ System.out.print(it2.next()+" "); } System.out.println(); } } //第一种使用递归的方式 public static LinkedList<LinkedList<Integer>> levelOrder(TreeNode root) { LinkedList<LinkedList<Integer>> res = new LinkedList<>(); if(root == null){ return res; } Deque<TreeNode> cur = new LinkedList<>(); Deque<TreeNode> sub = new LinkedList<>(); Deque<TreeNode> exc; cur.addLast(root); TreeNode node; while(!cur.isEmpty()){ LinkedList<Integer> temp = new LinkedList<>(); while(!cur.isEmpty()){ node = cur.removeFirst(); temp.add(node.val); if(node.left != null){ sub.addLast(node.left); } if(node.right != null){ sub.addLast(node.right); } } exc = cur; cur = sub; sub = exc; res.add(temp); } return res; } }
----------------------------------------output-------------------------------------------
1 2 2 3 4 4 3
相关文章推荐
- LeetCode 103 Binary Tree Zigzag Level Order Traversal(二叉树层序遍历)
- LeetCode 515 Find Largest Value in Each Tree Row(二叉树层序遍历)
- [LeetCode] 107. Binary Tree Level Order Traversal II 二叉树层序遍历 II
- LeetCode: Binary Tree Level Order Traversal 层序遍历二叉树
- LeetCode 102 Binary Tree Level Order Traversal(二叉树层序遍历)
- LeetCode | Binary Tree Level Order Traversal II(二叉树层序遍历II)
- leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)
- Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)
- leetcode之二叉树层序遍历按行存值
- [LeetCode] Binary Tree Level Order Traversal 二叉树层序遍历
- leetcode-Binary Tree Level Order Traversal 二叉树层序遍历
- [leetcode]Minimum Depth of Binary Tree--二叉树层序遍历的应用
- LeetCode 199 Binary Tree Right Side View(二叉树层序遍历)
- [LeetCode] Binary Tree Level Order Traversal II 二叉树层序遍历之二
- [leetcode]Minimum Depth of Binary Tree--二叉树层序遍历的应用
- LeetCode 513 Find Bottom Left Tree Value(二叉树层序遍历)
- LeetCode—Binary Tree Right Side View 二叉树层序遍历变形,Flatten Binary Tree to Linked List前序遍历变形
- leetcode:Binary Tree Level Order Traversal 二叉树层序遍历
- LeetCode 637 Average of Levels in Binary Tree(二叉树层序遍历)
- leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)