剑指offer-22 从上往下打印二叉树 -- Java实现

题目

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

分析

思路一:

这种打印方式需要遍历整棵树,而遍历的顺序并非前序,中序,后续。而是要求按层的顺序,从左往右的优先顺序打印。
举例来说,打印了根结点之后,我们应存储其左右子结点以供打印,而当要打印左子结点时,应将左子节点的子结点按从左至右的顺序存储起来。而此时存储的有根结点的右子结点和左子结点的子结点。后续以此类推。可以看出,我们存储临时的以供打印的子结点的这种数据结构应为队列(Quene)
总结:
广度优先遍历即上述按层的顺序来遍历树,首先应将第一个结点存入队列。接下来每次从队列的头部取一个结点出来,遍历这个节点所能到达的节点(即子节点)并将其存入队列。重复直至遍历完。
在这里插入图片描述

时间复杂度:o(N)
空间复杂度:o(N)

代码:

import java.util.ArrayList;
/**
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;

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

    }

}
*/
import java.util.LinkedList;
import java.util.Queue;
public class Solution {
    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<Integer> result = new ArrayList<Integer>();
        if(root==null) return result;
        Queue<TreeNode> quene = new LinkedList<TreeNode>();
        quene.offer(root);
        while(!quene.isEmpty()){
            TreeNode temp = quene.poll();
            result.add(temp.val);
            if(temp.left!=null) quene.offer(temp.left);
            if(temp.right!=null) quene.offer(temp.right);
        }
        return result;
    }
}
发布了46 篇原创文章 · 获赞 17 · 访问量 1026

猜你喜欢

转载自blog.csdn.net/weixin_42054926/article/details/103465748
今日推荐