题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

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

import java.util.*;
/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList>
     */
    public ArrayList> levelOrder (TreeNode root) {
        // write code here
        Queue que = new ArrayDeque();
        if(root != null){
            que.add(root);
        }
        ArrayList> res = new ArrayList();
        while(!que.isEmpty()){
            ArrayList list = new ArrayList();
//             遍历队列将其中的元素加入数组(层序遍历)
            int n = que.size();
            for(int i = 0; i < n; i++){
                TreeNode node = que.poll();
                list.add(node.val);
//                 将当前节点的左右孩子节点加入队列
                if(node.left != null){
                    que.add(node.left);
                }
                if(node.right != null){
                    que.add(node.right);
                }
            }
//             将每层的元素以子数组形式加入新的数组
            res.add(list);
        }
        return res;
    }
}

经典层序遍历,运用队列存储每层节点遍历出队加入队列用于输出返回值;
同时将当前遍历节点的左右孩子节点值加入队列(因为队列的特性是先进先出且遍历次数是上一次存储的队列长度,因此这里将新的节点加入队列并不会影响遍历);
在完成遍历后如果队列不为空(下一层存在孩子节点)更新队列长度再次遍历;

全部评论

相关推荐

小浪_Coding:个人技能一条测试没有
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务