LeetCode_107:二叉树的层序遍历II

1、题目描述:
在这里插入图片描述
2、思路:

方式1:层序遍历需要使用队列,每次让根节点入队,然后出队,和102题差不多,不过最后需要反转一下。

方式2:添加到集合中时,每次从头部添加

3、代码实现:

(1)Node节点类

public class Node {
    int val;
    Node left;
    Node right;
    Node(int val){
        this.val = val;
    }
}

(2)二叉树类Solution

class Solution {

    public Node root;

    public void setRoot(Node root) {
        this.root = root;
    }

    public List<List<Integer>> levelOrderBottom(Node root) {
        List<List<Integer>> list = new ArrayList<>();
        if(root==null){
            return list;
        }

        Queue<Node> queue  = new LinkedList();
        //先将根节点放入队列
        queue.add(root);

        //while循环会保证队列中只要有数据,就应该将其取出
        while(!queue.isEmpty()) {
            List<Integer> tempList = new ArrayList<>();
            int size = queue.size();

            //for循环为了让一层的节点能够放到一个tempList中
            for (int i = 0; i <size; i++) {
                //将根节点取出
                Node node = queue.poll();
                tempList.add(node.val);

                //将左子节点放入队列
                if (node.left != null) {
                    queue.add(node.left);
                }

                //将右子节点放入队列
                if (node.right != null) {
                    queue.add(node.right);
                }
            }
            list.add(tempList);
        }
        Collections.reverse(list);
        return list;
    }
}

(3)测试类Main

public class Main {
    public static void main(String[] args) {
        Node node = new Node(3);
        Node node1 = new Node(9);
        Node node2 = new Node(20);
        Node node3 = new Node(15);
        Node node4 = new Node(7);

        Solution binaryTree = new Solution();

        binaryTree.setRoot(node);
        node.left = node1;
        node.right = node2;
        node2.left = node3;
        node2.right = node4;

        List<List<Integer>> list = binaryTree.levelOrderBottom(node);
        System.out.println(list);
    }
}

4、LeetCode解答:

class Solution {
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
            List<List<Integer>> list = new ArrayList<>();
            if(root==null){
                return list;
            }
            Queue<TreeNode> queue  = new LinkedList();
            queue.add(root);

            while(!queue.isEmpty()){
                List<Integer> tempList = new ArrayList<>();
                int size = queue.size();
                for(int i=0;i<size;i++){
                    TreeNode node = queue.poll();
                    tempList.add(node.val);

                    if(node.left!=null){
                        queue.add(node.left);
                    }
                    if(node.right!=null){
                        queue.add(node.right);
                    }
                }
                list.add(tempList);
                // list.add(0,tempList);
            }
            Collections.reverse(list);
            return list;
    }
}
发布了716 篇原创文章 · 获赞 130 · 访问量 13万+

猜你喜欢

转载自blog.csdn.net/qq_42764468/article/details/105338071