Q60:把二叉树打印成多行

原创 2016年08月29日 09:08:27

importjava.util.LinkedList;
importjava.util.Queue;
importBinaryTree.BinaryTreeNode;
public class Q60把二叉树打印成多行 {
   /**
    * 题目:把二叉树打印成多行
    * 题目说明:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行。
    * 解题思路:利用层次遍历算法,设置变量last指向当前层的最后一个结点,设置变量count记录当前层已经访问的结点个数,当count和last相等时,表示该层访问结束。
    */
   public static void main(String[] args) {
      BinaryTreeNode root = new BinaryTreeNode();
      BinaryTreeNode node1 = new BinaryTreeNode();
      BinaryTreeNode node2 = new BinaryTreeNode();
      BinaryTreeNode node3 = new BinaryTreeNode();
      BinaryTreeNode node4 = new BinaryTreeNode();
      BinaryTreeNode node5 = new BinaryTreeNode();
      BinaryTreeNode node6 = new BinaryTreeNode();
     
      root.leftNode = node1;
      root.rightNode = node2;    
      node1.leftNode = node3;
      node1.rightNode = node4;   
      node2.leftNode = node5;
      node2.rightNode = node6;
     
      root.value = 8;
      node1.value = 6;
      node2.value = 10;
      node3.value = 5;
      node4.value = 7;
      node5.value = 9;
      node6.value = 11;
      Q60把二叉树打印成多行 test = new Q60把二叉树打印成多行();
      test.PrintBinaryTreeNode(root);
   }
   public static void PrintBinaryTreeNode(BinaryTreeNode root){
      if(root == null){
         return ;
      }
      Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
      queue.add(root);//添加root到queue中
      int nextLevel = 0;
      int toBePrint = 1;
     
      while(!queue.isEmpty()){
         BinaryTreeNode curNode = queue.peek();//peek()只是获取队列首元素
         System.out.print(curNode.value + " ");
        
         if(curNode.leftNode != null){
            queue.add(curNode.leftNode);
            nextLevel ++;
         }
         if(curNode.rightNode != null){
            queue.add(curNode.rightNode);
            nextLevel ++;
         }
        
         queue.poll();//删除队列首元素
         toBePrint --;//将要打印的元素数目减1
         if(toBePrint == 0){
            System.out.println();
            toBePrint = nextLevel;
            nextLevel = 0;
         }
      }
   }
}
packageBinaryTree;
public class BinaryTreeNode {
   public int value;//此出要为非static的
   public BinaryTreeNode leftNode;
   public BinaryTreeNode rightNode; 
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

打印二叉树所有路径---JAVA实现

思路:把当前结点存储到数组当中,如果当前结点为叶子结点就打印当前数组,采取递归的方式来进行操作。技巧一:就是数组的问题,所有路径结点都存到一个数组当中,由于数组传递是传址,改变数组指向内容的时候其他传...
  • u014494703
  • u014494703
  • 2016年03月27日 12:07
  • 1848

数据结构 《4》---- 一个漂亮的打印二叉树的程序

一个漂亮地打印二叉树的一个小程序。
  • u012653791
  • u012653791
  • 2014年01月17日 20:50
  • 3767

剑指offer刷题之java实现的从上往下打印二叉树

package mine; import java.util.ArrayList; import java.util.LinkedList; import java.util.Queue; /** ...
  • u012270113
  • u012270113
  • 2015年08月09日 17:29
  • 2415

剑指offer 面试题60 把二叉树打印成多行

剑指offer 面试题60 把二叉树打印成多行 题目: 从上到下按层打印二叉树,同一层的结点按从左到右顺序打印, 每一层打印到一行。例如下面的二叉树的结果为: ...
  • liyazhou0215
  • liyazhou0215
  • 2017年06月08日 19:10
  • 575

《剑指offer》:[60]把二叉树打印成多行

题目:从上到下安层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。 例如,图(1)中二叉树以及打印结果为: 这个题其实很简单,我们只需要设置两个变量就可以搞定。一个变量表示当...
  • gogoky
  • gogoky
  • 2016年06月28日 20:03
  • 2233

剑指offer-面试题60-把二叉树打印成多行

二叉树节点定义: package case60_PrintBinaryTreeByRows; /** * 二叉树节点结构定义。 * * @author WangSai * */ pub...
  • VIP_WangSai
  • VIP_WangSai
  • 2017年04月24日 16:19
  • 310

【60】把二叉树打印成多行

【60】把二叉树打印成多行 参与人数:2502 时间限制:1秒 空间限制:32768K 题目描述 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。 牛客网题目链接:点击这里VS20...
  • qianggezaici
  • qianggezaici
  • 2016年08月13日 16:24
  • 323

【剑指Offer学习】【面试题60:把二叉树打印出多行】

题目:从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。解题思路  用一个队列来保存将要打印的结点。为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前的...
  • DERRANTCM
  • DERRANTCM
  • 2015年07月13日 08:00
  • 2920

剑指offer——面试题60:把树打印成多行

题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。     代码: /* struct TreeNode { int val; struct TreeNode ...
  • dengheCSDN
  • dengheCSDN
  • 2017年11月09日 20:39
  • 171

《剑指offer》把二叉树打印成多行

题目:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解析:层次遍历二叉树,要点是要用队列存储节点信息。还有个问题,如何知道要换层?答案是用一个计数器current指示当前层的节点个数...
  • wickedvalley
  • wickedvalley
  • 2017年07月24日 23:01
  • 521
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Q60:把二叉树打印成多行
举报原因:
原因补充:

(最多只允许输入30个字)