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

求二叉树的层序遍历

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

JAVA
思路:
1, 从根节点开始,把根节点放在list1中。
2,对这个list1中的节点遍历,分别判断其是否存在左右孩子节点,如果存在,就放在临时list2中。list2是装每一层的孩子节点的,所以在循环里面,每循环一次就new一个。
3,此时的临时list2就是装的当前层的所有孩子节点。
4,把list2 赋值给list1,
5,下次while循环就是判断list1是否是空,空代表没有下一层了。while循环结束,这里的list2只是用来当中间媒介的。

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */
//解法一: 数据结构用list,一层层遍历,判断每个节点是否有左右孩子。
//解法二:数据结构用队列。
public class Solution {
    /**
     * 
     * @param root TreeNode类 
     * @return int整型ArrayList<arraylist<>>
     */
    public ArrayList<arraylist<integer>> levelOrder (TreeNode root) {
        // write code here
        ArrayList<arraylist<integer>> resList= new ArrayList<>();
        //必备的空节点判断
        if(root == null) return resList;
        //声明存放每个节点的list
        ArrayList<treenode> nodeList= new ArrayList<>();
        //1,根节点放进去
        nodeList.add(root); 
        //开始对每个节点判断是否有下层节点的操作开始
        while(!nodeList.isEmpty()){
            ArrayList<treenode> tempList= new ArrayList<>();//辅助list用来存每一层的节点
            ArrayList<integer> dataList= new ArrayList<>();//存每个节点的数据
            //2,遍历存放每个节点的list
            for(TreeNode node :nodeList){
                dataList.add(node.val); //当前节点的数值放进去,放的是数值Int
                //3
                if(node.left != null){
                    tempList.add(node.left);
                }
                if(node.right != null) {
                    tempList.add(node.right);
                }
            }
            //4
            nodeList = tempList; 
            resList.add(dataList);//保存每一层的数据
        }
        return resList;
    }


}
全部评论

相关推荐

霁华Tel:秋招结束了,好累。我自编了一篇对话,语言别人看不懂,我觉得有某种力量在控制我的身体,我明明觉得有些东西就在眼前,但身边的人却说啥也没有,有神秘人通过电视,手机等在暗暗的给我发信号,我有时候会突然觉得身体的某一部分不属于我了。面对不同的人或场合,我表现出不一样的自己,以至于都不知道自己到底是什么样子的人。我觉得我已经做的很好,不需要其他人的建议和批评,我有些时候难以控制的兴奋,但是呼吸都让人开心。
点赞 评论 收藏
分享
10-30 22:18
已编辑
毛坦厂中学 C++
点赞 评论 收藏
分享
评论
1
收藏
分享
牛客网
牛客企业服务