美文网首页
[剑指offer][Java]从上往下打印二叉树

[剑指offer][Java]从上往下打印二叉树

作者: Maxinxx | 来源:发表于2019-06-23 10:34 被阅读0次

    题目

    从上往下打印出二叉树的每个节点,同层节点从左至右打印。

    程序核心思想

    原来想用递归做,但是发现递归一下就到最底层了,不能实现层级遍历。所以想到用队列,队列里面存放的是树的节点,出一个结点就添加进去它的左孩子和右孩子,这样就能实现层级遍历了。

    Tips

    • 队列的一些使用方法:
      Java 集合中的 Queue 继承自Collection 接口,Deque, LinkedList, PriorityQueue, BlockingQueue 等类都实现了它。
      Queue使用时要尽量避免Collection的add()和remove()方法,而是要使用offer()来加入元素,使用poll()来获取并移出元素。它们的优点是通过返回值可以判断成功与否,add()和remove()方法在失败的时候会抛出异常。 如果要使用前端而不移出该元素,使用element()或者peek()方法。
    • 创建队列:Queue<TreeNode> queue = new LinkedList<TreeNode>();
      添加元素:offer()
      出队:poll()
      是否为空:isEmpty()
      查看队头元素(不出队):peek()或element()

    代码

    import java.util.ArrayList;
    import java.util.Queue;
    import java.util.LinkedList;
    /**
    public class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;
    
        public TreeNode(int val) {
            this.val = val;
    
        }
    
    }
    */
    public class Solution {
        public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList<TreeNode>();
            ArrayList<Integer> array = new ArrayList<Integer>();
            if(root == null)    return array;
    
            queue.offer(root);
            while(queue.isEmpty() == false){
                TreeNode node = (TreeNode)queue.poll();
                if(node.left != null)    queue.offer(node.left);
                if(node.right != null)    queue.offer(node.right);
                array.add(node.val);
            }
            return array;
        }
    }
    

    相关文章

      网友评论

          本文标题:[剑指offer][Java]从上往下打印二叉树

          本文链接:https://www.haomeiwen.com/subject/aokiqctx.html