107_二叉树的层序遍历II

107_二叉树的层序遍历II 

 

 

package 二叉树.BT;
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
 * https://leetcode-cn.com/problems/binary-tree-level-order-traversal-ii/
 * @author Huangyujun
 *宝贝:咱要知道咱使用的是ArrayList 可以从任何地方进行添加
 *(想实现倒序:逆着插入:一直插入索引为 0 的位置)
 */
public class _107_二叉树的层序遍历II {
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode() {
        }

        TreeNode(int val) {
            this.val = val;
        }

        TreeNode(int val, TreeNode left, TreeNode right) {
            this.val = val;
            this.left = left;
            this.right = right;
        }
    }    
    //从叶子到根的遍历(层序遍历)~ 思路:倒序:只需要不断插入第一个位置
    public List<List<Integer>> levelOrderBottom(TreeNode root) {
        List<Integer> item = new ArrayList<>();
        List<List<Integer>> result = new ArrayList<>();
        if(root == null)     return result;
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        int levelSize = 1;
        while(!queue.isEmpty()) {
            TreeNode node = queue.poll();
            levelSize--;
            item.add(node.val);
            if(node.left != null) {
                queue.offer(node.left);
            }
            if(node.right != null) {
                queue.offer(node.right);
            }
            if(levelSize == 0) {
                result.add(0, item);
                item = new ArrayList<>();
                levelSize = queue.size();
            }
        }        
        return result;
    }
}

 

posted @ 2021-12-19 23:56  一乐乐  阅读(3)  评论(0编辑  收藏  举报