102. Binary Tree Level Order Traversal

来源:互联网 发布:skype for mac 编辑:程序博客网 时间:2024/05/21 20:29

原题:

点击打开链接

即实现给定二叉树的层次遍历。


思考过程&解题思路:

用队列解决这个问题不困难。第一次用java的队列Queue<TreeNode> queue = new LinearList<>();如果只是输出层次遍历的结果,先向队列里添加根节点,每个节点出队列时添加左右子节点,直至队列为空就可以了。这道题不一样在于不同层次要表现出来,不同层次放在不同数组里。我的解决方案是每一层声明一个队列,这层队列左右子节点放在新队列里表示下一层,递归调用此方法直至队列为空。


结果代码:

List<List<Integer>> ret = new ArrayList<>();    public List<List<Integer>> levelOrder(TreeNode root) {        if (root == null) return ret;        Queue<TreeNode> queue = new LinkedList<>();        queue.add(root);        recursive(queue);        return ret;    }    public void recursive(Queue<TreeNode> queue){//这里的queue存的是上层的节点        if (queue.isEmpty()) return;//说明结束了        Queue<TreeNode> newQueue = new LinkedList<>();        List<Integer> subRet = new ArrayList<>();//存储此层结果        while (!queue.isEmpty()){            TreeNode treeNode = queue.remove();            subRet.add(treeNode.val);            TreeNode left = treeNode.left;            TreeNode right = treeNode.right;            if (left != null) newQueue.add(left);            if (right != null) newQueue.add(right);        }        ret.add(subRet);        recursive(newQueue);    }

原创粉丝点击