面试题32:从上到下打印二叉树

/*

 * 面试题32:从上到下打印二叉树

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

 * 解题思路:DequeQueue的子接口,我们知道Queue是一种队列形式,Deque则是双向队列,它支持从两个端点方向检索和插入元素

 * 当队列不空的时候,重复以下操作。

 * 1、弹出一个元素。作为当前的根节点。

 * 2、如果根节点有左孩子,访问左孩子,并将左孩子入队。

 * 3、如果根节点有右孩子,访问右孩子,并将右孩子入队。

 */

 

import java.util.ArrayList;

import java.util.Deque;

import java.util.LinkedList;

 

class TreeNode4 {

    int val = 0;

    TreeNode4 left = null;

    TreeNode4 right = null;

 

    public TreeNode4(int val) {

       this.val = val;

    }

}

 

public class No32PrintFromTopToBottom {

 

    public static void main(String[] args) {

       No32PrintFromTopToBottom n = new No32PrintFromTopToBottom();

       TreeNode4 root = new TreeNode4(8);

       TreeNode4 node6 = new TreeNode4(6);

       TreeNode4 node10 = new TreeNode4(10);

       root.left = node6;

       root.right = node10;

      

       TreeNode4 node5 = new TreeNode4(5);

       TreeNode4 node7 = new TreeNode4(7);

       node6.left = node5;

       node6.right = node7;

      

       TreeNode4 node9 = new TreeNode4(9);

       TreeNode4 node11 = new TreeNode4(11);

       node10.left = node9;

       node10.right = node11;

          

       ArrayList<Integer> a = n.PrintFromTopToBottom(root);

 

       for(int i:a){

 

           System.out.print(i+" ");

 

       }  

    }

 

    public ArrayList<Integer> PrintFromTopToBottom(TreeNode4 root) {

       ArrayList<Integer> list = new ArrayList<Integer>();

       Deque<TreeNode4> deque = new LinkedList<TreeNode4>();

      

       if (root == null) {

           return list;

       }

       deque.add(root);

      

       while (!deque.isEmpty()) {

           TreeNode4 t = deque.pop();

           list.add(t.val);

           if (t.left != null) deque.add(t.left);

           if (t.right != null) deque.add(t.right);

       }

       return list;

    }

   

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值