剑指offer系列20--从上到下打印二叉树

本文介绍了一种从上到下、从左至右打印二叉树各节点的方法。通过使用ArrayList来保存待访问的节点,实现了按层次顺序遍历二叉树的功能,并附带示例代码。

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

* 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
* 【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
* 有,就将左右值放到集合中;
* 根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。

 1 package com.exe4.offer;
 2 
 3 import java.util.ArrayList;
 4 
 5 /**
 6  * 20 [题目]从上往下打印出二叉树的每个节点,同层节点从左至右打印。
 7  *    【思路】从根结点开始,先保存结点,再看根结点的左右结点有没有值。
 8  *           有,就将左右值放到集合中;
 9  *          根节点输出后,打印根结点左结点并将根结点左结点的左右结点保存;打印根结点右结点并将根结点右结点的左右结点保存。。
10  *            
11  * @author WGS
12  *
13  */
14 public class PrintBitTree {
15     
16     public static class TreeNode{
17         int val=0;
18         TreeNode left=null;
19         TreeNode right=null;
20         public TreeNode(int n){
21             this.val=n;
22         }
23     }
24 
25     public  void printBitTreeFromTopToBottom(TreeNode rootNode){
26         
27         if(rootNode==null) return;
28         ArrayList<TreeNode> list=new ArrayList<>();//保存遍历的节点
29         ArrayList<Integer> data=new ArrayList<>();//保存最后输出的遍历节点
30         int index=1;
31         
32         list.add(rootNode);
33         
34         while(list.size()>0){
35             //移除后,下一位即0位。比如8在0位,移除后6即在0位。
36             //此时6由1位》0位,10由2位变为1位。
37             //所以下次存储时要在2位存储,不是在3位,所以此处index--
38             TreeNode temp=list.remove(0);//8        
39             index--;
40             //data.add(temp.val);//8  6   10...
41             System.out.print(temp.val+" ");
42             if(temp.left!=null){
43                 list.add(index++, temp.left);//1位6   
44             }
45             if(temp.right!=null){
46                 list.add(index++, temp.right);//2位10
47             }
48         }
49 
50     }
51     public static void main(String[] args) {
52          TreeNode root = new TreeNode(8);
53             TreeNode node1 = new TreeNode(6);
54             TreeNode node2 = new TreeNode(10);
55             TreeNode node3 = new TreeNode(5);
56             TreeNode node4 = new TreeNode(7);
57             TreeNode node5 = new TreeNode(9);
58             TreeNode node6 = new TreeNode(11);
59             
60             root.left = node1;
61             root.right = node2;
62             node1.left = node3;
63             node1.right = node4;
64             node2.left = node5;
65             node2.right = node6;
66             
67             new PrintBitTree().printBitTreeFromTopToBottom(root);
68             System.out.println();
69 /*            for (Integer integer : list) {
70                 System.out.print(integer + " ");*/
71 
72 
73     }
74 }

 

转载于:https://www.cnblogs.com/noaman/p/5454809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值