当前位置: 首页>后端>正文

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

题目

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

程序核心思想

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

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;
    }
}

https://www.xamrdz.com/backend/3gw1932222.html

相关文章: