给定一个二叉树,返回该二叉树层序遍历的结果

求二叉树的层序遍历

http://www.nowcoder.com/questionTerminal/04a5560e43e24e9db4595865dc9c63a3

转自一个大佬的代码,值得学习!!!
二叉树层次遍历不难,关键点是根据题目要求,要一层一层存放下来,刚开始卡在不知道如何记录层数,层数代表着ArrayList的个数,该算法巧妙的解决了该问题。
思想:从上到下,从左到右。
先将根节点入队,记录下该层结点个数levelNum,第一层就根结点一个。
然后队列不空的话,每次循环创建一个新的ArrayList,内层循环从0到levelNum,将每层结点的孩子结点入队,入队后,将该层结点一次放入ArrayList中,依次反复。值得学习!!
import java.util.*;

// class TreeNode {
// int val = 0;
// TreeNode left = null;
// TreeNode right = null;
// }

public class Solution {
/**
*
* @param root TreeNode类
* @return int整型ArrayList<ArrayList<>>
*/

public ArrayList<ArrayList<integer>> levelOrder(TreeNode root) {
ArrayList<ArrayList<integer>> res = new ArrayList<ArrayList<integer>>();
if (root == null)
return res;
Queue<treenode> queue = new LinkedList<treenode>();
queue.offer(root);
while (!queue.isEmpty()) {
ArrayList<integer> level = new ArrayList<integer>();
int levelNum = queue.size();
for (int i = 0; i < levelNum; i++) {
if (queue.peek().left != null)
queue.offer(queue.peek().left);
if (queue.peek().right != null)
queue.offer(queue.peek().right);
level.add(queue.poll().val);
}
res.add(level);
}
return res;
}
}</integer></integer></treenode></treenode></integer></integer></integer>

全部评论

相关推荐

赏个offer求你了:友塔HR还专门加我告诉我初筛不通过😂
点赞 评论 收藏
分享
勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
2 收藏 评论
分享
牛客网
牛客企业服务