剑指offer系列之二十一:从上到下打印二叉树

简介:

题目描述

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

此题实际上就是二叉树层序遍历方法的考察,具体思路是:使用一个集合(或者栈,但是相对来说使用栈操作会方便一些)来保存遍历的节点,还需要创建一个集合用来保存最后输出的遍历序列。从根节点开始遍历,首先把该节点放入集合中,并输出其值,之后便从集合中移除该节点,不过在此之前需要判断该节点是否有左右孩子,如果有左右(满足其一就可以)孩子,便把左右孩子放入集合中。每次输出值后便把节点具体的值放入遍历集合中,作为最后的返回结果。

下面是基于这种思路写出的代码:

package com.rhwayfun.offer;

import java.util.ArrayList;

public class PrintBiTreeFromTopToBottom {

    static class TreeNode {
        int val = 0;
        TreeNode left = null;
        TreeNode right = null;

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

        }

    }

    public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
        ArrayList<TreeNode> treeList = new ArrayList<TreeNode>();
        ArrayList<Integer> treeData = new ArrayList<Integer>();
        if(root == null) return treeData;
        int index = 1;
        treeList.add(root);
        while(treeList.size() > 0){
            TreeNode front = treeList.remove(0);
            index--;
            //System.out.print(front.val + " ");
            treeData.add(front.val);
            //如果节点有左右孩子,则将器左右孩子节点放入队列的末尾
            if(front.left != null){
                treeList.add(index++,front.left);
            }
            if(front.right != null){
                treeList.add(index++,front.right);
            }
        }
        return treeData;
    }

    public static void main(String[] args) {
        TreeNode root = new TreeNode(8);
        TreeNode node1 = new TreeNode(6);
        TreeNode node2 = new TreeNode(10);
        TreeNode node3 = new TreeNode(5);
        TreeNode node4 = new TreeNode(7);
        TreeNode node5 = new TreeNode(9);
        TreeNode node6 = new TreeNode(11);

        root.left = node1;
        root.right = node2;
        node1.left = node3;
        node1.right = node4;
        node2.left = node5;
        node2.right = node6;

        ArrayList<Integer> list = new PrintBiTreeFromTopToBottom().PrintFromTopToBottom(root);
        System.out.println();
        for (Integer integer : list) {
            System.out.print(integer + " ");
        }
    }
}
目录
相关文章
|
7月前
|
算法
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ
《剑指offer》之从上到下打印二叉树Ⅰ、Ⅱ、Ⅲ
53 0
|
7月前
剑指 Offer 32:从上到下打印二叉树
剑指 Offer 32:从上到下打印二叉树
46 0
【剑指offer】-从上往下打印二叉树-22/67
【剑指offer】-从上往下打印二叉树-22/67
|
7月前
|
存储
【剑指offer】-把二叉树打印成多行-43/67
【剑指offer】-把二叉树打印成多行-43/67
|
7月前
|
存储
【剑指offer】- 按之字形顺序打印二叉树-45/67
【剑指offer】- 按之字形顺序打印二叉树-45/67
剑指 Offer 32 - III. 从上到下打印二叉树 III(中等,层序遍历)
剑指 Offer 32 - III. 从上到下打印二叉树 III(中等,层序遍历)
75 0
剑指 Offer 32 - III. 从上到下打印二叉树 III(中等,层序遍历)
剑指 Offer 32 - I. 从上到下打印二叉树(中等,层序遍历)
剑指 Offer 32 - I. 从上到下打印二叉树(中等,层序遍历)
74 0
剑指 Offer 32 - I. 从上到下打印二叉树(中等,层序遍历)
|
算法 前端开发 程序员
「LeetCode」剑指Offer-32从上到下打印二叉树 III ⚡️
「LeetCode」剑指Offer-32从上到下打印二叉树 III ⚡️
111 0
「LeetCode」剑指Offer-32从上到下打印二叉树 III ⚡️
|
算法 前端开发 程序员
「LeetCode」剑指Offer-32从上到下打印二叉树 ⚡️
「LeetCode」剑指Offer-32从上到下打印二叉树 ⚡️
111 0
「LeetCode」剑指Offer-32从上到下打印二叉树 ⚡️
|
算法 前端开发 程序员
「LeetCode」剑指Offer-32从上到下打印二叉树 II ⚡️
「LeetCode」剑指Offer-32从上到下打印二叉树 II ⚡️
87 0
「LeetCode」剑指Offer-32从上到下打印二叉树 II ⚡️