题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)
二叉树结点的定义如下:
struct BinaryTreeNode{
       int     m_nValue;
       BinaryTreeNode*     m_pLeft;
       BinaryTreeNode*     m_pRight;
}

代码实现:

  1. package com.yyq;
  2.  
  3. import java.util.LinkedList;
  4. import java.util.Queue;
  5.  
  6. /**
  7. * Created by Administrator on 2015/9/16.
  8. */
  9. public class PrintFromTopToBottom {
  10. public static void printFromTopToBottom(BinaryTreeNode pTreeRoot){
  11. if (pTreeRoot == null)
  12. return;
  13. Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
  14. queue.offer(pTreeRoot);
  15. while (queue.size() > 0){
  16. BinaryTreeNode pNode = queue.poll();
  17. System.out.print(pNode.getM_nValue() + "\t");
  18. if (pNode.getM_pLeft() != null){
  19. queue.offer(pNode.getM_pLeft());
  20. }
  21. if (pNode.getM_pRight() != null){
  22. queue.offer(pNode.getM_pRight());
  23. }
  24. }
  25. }
  26. // ====================测试代码====================
  27. public static void Test(String testName, BinaryTreeNode pRoot){
  28. if (testName != null)
  29. System.out.println(testName + " Begin:");
  30. printFromTopToBottom(pRoot);
  31. System.out.println();
  32. }
  33. // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点
  34. // 8
  35. // 6 10
  36. // 5 7 9 11
  37. public static void Test1() {
  38. System.out.println("\n=====Test1 starts:=====");
  39. BinaryTreeNode pNode8 = new BinaryTreeNode(8);
  40. BinaryTreeNode pNode6 = new BinaryTreeNode(6);
  41. BinaryTreeNode pNode10 = new BinaryTreeNode(10);
  42. BinaryTreeNode pNode5 = new BinaryTreeNode(5);
  43. BinaryTreeNode pNode7 = new BinaryTreeNode(7);
  44. BinaryTreeNode pNode9 = new BinaryTreeNode(9);
  45. BinaryTreeNode pNode11 = new BinaryTreeNode(11);
  46.  
  47. pNode8.connectTreeNodes(pNode6, pNode10);
  48. pNode6.connectTreeNodes(pNode5, pNode7);
  49. pNode10.connectTreeNodes(pNode9, pNode11);
  50.  
  51. Test("Test1",pNode8);
  52. pNode8 = null;
  53. }
  54.  
  55. // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个左子结点
  56. // 8
  57. // 7
  58. // 6
  59. // 5
  60. //
  61. public static void Test2() {
  62. System.out.println("\n=====Test2 starts:=====");
  63. BinaryTreeNode pNode8 = new BinaryTreeNode(8);
  64. BinaryTreeNode pNode7 = new BinaryTreeNode(7);
  65. BinaryTreeNode pNode6 = new BinaryTreeNode(6);
  66. BinaryTreeNode pNode5 = new BinaryTreeNode(5);
  67. BinaryTreeNode pNode4 = new BinaryTreeNode(4);
  68.  
  69. pNode8.connectTreeNodes(pNode7, null);
  70. pNode7.connectTreeNodes(pNode6, null);
  71. pNode6.connectTreeNodes(pNode5, null);
  72. pNode5.connectTreeNodes(pNode4, null);
  73.  
  74. Test("Test2",pNode8);
  75. pNode8 = null;
  76. }
  77.  
  78. // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个右子结点
  79. // 8
  80. // 7
  81. // 6
  82. // 5
  83. // 4
  84. public static void Test3() {
  85. System.out.println("\n=====Test3 starts:=====");
  86. BinaryTreeNode pNode8 = new BinaryTreeNode(8);
  87. BinaryTreeNode pNode7 = new BinaryTreeNode(7);
  88. BinaryTreeNode pNode6 = new BinaryTreeNode(6);
  89. BinaryTreeNode pNode5 = new BinaryTreeNode(5);
  90. BinaryTreeNode pNode4 = new BinaryTreeNode(4);
  91.  
  92. pNode8.connectTreeNodes(null, pNode7);
  93. pNode7.connectTreeNodes(null, pNode6);
  94. pNode6.connectTreeNodes(null, pNode5);
  95. pNode5.connectTreeNodes(null, pNode4);
  96.  
  97. Test("Test3",pNode8);
  98. pNode8 = null;
  99. }
  100.  
  101. // 测试空二叉树:根结点为空指针
  102. public static void Test4() {
  103. System.out.println("\n=====Test4 starts:=====");
  104. BinaryTreeNode pNode = null;
  105.  
  106. Test("Test4",pNode);
  107. }
  108.  
  109. // 测试只有一个结点的二叉树
  110. public static void Test5() {
  111. System.out.println("=====Test5 starts:=====");
  112. BinaryTreeNode pNode8 = new BinaryTreeNode(8);
  113.  
  114. Test("Test5",pNode8);
  115. pNode8 = null;
  116. }
  117.  
  118. public static void main(String[] args) {
  119. Test1();
  120. Test2();
  121. Test3();
  122. Test4();
  123. Test5();
  124. }
  125. }
 
结果输出:
=====Test1 starts:=====
Test1 Begin:
8 6 10 5 7 9 11
 
=====Test2 starts:=====
Test2 Begin:
8 7 6 5 4
 
=====Test3 starts:=====
Test3 Begin:
8 7 6 5 4
 
=====Test4 starts:=====
Test4 Begin:
 
=====Test5 starts:=====
Test5 Begin:
8

P137、面试题23:从上往下打印二叉树的更多相关文章

  1. 剑指Offer:面试题23——从上往下打印二叉树(java实现)

    问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...

  2. 剑指offer-面试题23.从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...

  3. 《剑指offer》面试题23 从上往下打印二叉树 Java版

    注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...

  4. 面试题23从上到下打印二叉树+queue操作

    //本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...

  5. 剑指offer_面试题_从上往下打印二叉树

    题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 /     \ 6     10 /   \ ...

  6. C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解

    剑指offer  面试题23:从上往下打印二叉树 参与人数:4853  时间限制:1秒  空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...

  7. 【剑指offer 面试题23】从上往下打印二叉树

    思路: 没啥好说的,BFS. C++: #include <iostream> #include <queue> using namespace std; struct Tre ...

  8. 【剑指Offer学习】【面试题23:从上往下打印二叉树】

    题目:从上往下打印出二叉树的每一个结点,同一层的结点依照从左向右的顺序打印. 二叉树结点的定义: public static class BinaryTreeNode { int value; Bin ...

  9. 面试题32 - III. 从上到下打印二叉树 III

    面试题32 - III. 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类 ...

  10. 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III

    题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...

随机推荐

  1. 压力测试 tpcc-mysql

    TPCC-MYSQL是由percona发布一个用来测试数据库的压力工具,模拟一个电商的业务, 主要的业务有新增订单,库存查询,发货,支付等模块的测试 1.下载 2.安装 1.解压   cd scr ; ...

  2. Linux学习之路一计算机是如何工作的

    初次接触MOOC课堂,里面有个很牛X的老师教Linux,恰好自己有兴趣学,顾有了此系列学习博文. 第一讲   计算机是如何工作的 学习Linux,涉及到了C语言和汇编以及操作系统的知识,顾第一讲要讲讲 ...

  3. position containing block原点

    如果元素有属性 'position:absolute',containing block 由最近的 position 不是 static 的祖先建立,按下面的步骤:        1.如果祖先是块级元 ...

  4. python(六)面向对象

    1.封装 支持多重继承,但如果不需要的时候最好不要使用,避免出现不必要的bug: 2.继承 3.多态 4.构造函数 5.私有和共有 在属性前写两个下滑线定义就是私有的

  5. Android Wear预览版——尝鲜

    前两天Google推出了Android Wear的SDK,稍稍的瞧了一眼,发现这个预览版的功能还是比较简单的,只有一个通知转发的功能,不过就这么一个功能,带来的效果却是Very Good~~ 功能:发 ...

  6. The main roles of LTE eNodeB.

    eNB的功能包括: RRM(无线资源管理) IP头压缩 用户数据流加密 UE附着时的MME选择 寻呼信息的调度传输 广播信息的调度传输 设置和提供eNB的测量 CMC(连接移动性控制) 动态资源分配 ...

  7. Fedora 17安装NFS

    1.NFS概述 NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统的计算机间共享文件和外设,所以它的通讯协定设计与主机及作业系统无关. 它是由SUN公司 ...

  8. mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法

    23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...

  9. Java中的break与continue区别

    break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...

  10. 主题: 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合DEDECMS

    作者: fmamcn, 发布日期: 2012-09-29 12:28:39, 浏览数: 1567 看了狼魂发表的将kindeditor中的代码高亮插件prettify换为SyntaxHighlight ...