从上到下打印二叉树三种形式 (层序遍历)

本文介绍了如何从上到下打印二叉树,包括常规的层序遍历以及之字形顺序遍历。通过实例展示了不同遍历方式的输出结果,帮助理解二叉树的遍历方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

剑指 Offer 32 - I. 从上到下打印二叉树

从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。

[3,9,20,15,7]

       LinkedList<TreeNode> list=new LinkedList<>();
        LinkedList<Integer> res=new LinkedList<>();  
        public int[] levelOrder(TreeNode root) {
          if(root==null) return new int[0];
          list.offer(root);
          while(!list.isEmpty()){
               TreeNode temp=list.poll();
               res.add(temp.val);
               if(temp.left!=null) list.offer(temp.left);
               if(temp.right!=null) list.offer(temp.right); 
          }
      
           int i=0; 
          int nums[]=new int[res.size()];
          for(int x:res)
           nums[i++]=x;

          return nums;

    }
  1. 二叉树的层序遍历
    给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
    [
    [3],
    [9,20],
    [15,7]
    ]
    Queue<TreeNode> q=new LinkedList<>();
     List<List<Integer>> res=new ArrayList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
       if(root==null) return res;
       q.offer(root);
         
      while(!q.isEmpty()){
        List<Integer> list=new LinkedList<>();
       
        int n=q.size();

        for(int i=0;i<n;i++){
         TreeNode temp=q.poll(); 
         list.add(temp.val); 
         if(temp.left!=null) q.offer(temp.left);
         if(temp.right!=null) q.offer(temp.right); 
         } 
          res.add(list);
    }
          return res;
  } 

剑指 Offer 32 - III. 从上到下打印二叉树 III

请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
[
[3],
[20,9],
[15,7]
]

   LinkedList<TreeNode> q=new LinkedList<>();
     LinkedList<List<Integer>> res=new LinkedList<>();
    public List<List<Integer>> levelOrder(TreeNode root) {
    if(root==null) return res;
       q.add(root);
         
      while(!q.isEmpty()){
        LinkedList<Integer> list=new LinkedList<>(); 
        int n=q.size();

        for(int i=0;i<n;i++){
         TreeNode temp=q.poll(); 
         int count=res.size(); 
         if(count%2==0)
         list.addLast(temp.val);  
         else
         list.addFirst(temp.val); 
         if(temp.left!=null) q.offer(temp.left);
         if(temp.right!=null) q.offer(temp.right); 
         } 
          res.add(list);
    }
          return res;
  }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值