P137、面试题23:从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如输入如图的二叉树,则依次打印出8,6,10,5,7,9,11.(其实是按层遍历)
二叉树结点的定义如下:
struct BinaryTreeNode{
int m_nValue;
BinaryTreeNode* m_pLeft;
BinaryTreeNode* m_pRight;
}
代码实现:
- package com.yyq;
- import java.util.LinkedList;
- import java.util.Queue;
- /**
- * Created by Administrator on 2015/9/16.
- */
- public class PrintFromTopToBottom {
- public static void printFromTopToBottom(BinaryTreeNode pTreeRoot){
- if (pTreeRoot == null)
- return;
- Queue<BinaryTreeNode> queue = new LinkedList<BinaryTreeNode>();
- queue.offer(pTreeRoot);
- while (queue.size() > 0){
- BinaryTreeNode pNode = queue.poll();
- System.out.print(pNode.getM_nValue() + "\t");
- if (pNode.getM_pLeft() != null){
- queue.offer(pNode.getM_pLeft());
- }
- if (pNode.getM_pRight() != null){
- queue.offer(pNode.getM_pRight());
- }
- }
- }
- // ====================测试代码====================
- public static void Test(String testName, BinaryTreeNode pRoot){
- if (testName != null)
- System.out.println(testName + " Begin:");
- printFromTopToBottom(pRoot);
- System.out.println();
- }
- // 测试完全二叉树:除了叶子节点,其他节点都有两个子节点
- // 8
- // 6 10
- // 5 7 9 11
- public static void Test1() {
- System.out.println("\n=====Test1 starts:=====");
- BinaryTreeNode pNode8 = new BinaryTreeNode(8);
- BinaryTreeNode pNode6 = new BinaryTreeNode(6);
- BinaryTreeNode pNode10 = new BinaryTreeNode(10);
- BinaryTreeNode pNode5 = new BinaryTreeNode(5);
- BinaryTreeNode pNode7 = new BinaryTreeNode(7);
- BinaryTreeNode pNode9 = new BinaryTreeNode(9);
- BinaryTreeNode pNode11 = new BinaryTreeNode(11);
- pNode8.connectTreeNodes(pNode6, pNode10);
- pNode6.connectTreeNodes(pNode5, pNode7);
- pNode10.connectTreeNodes(pNode9, pNode11);
- Test("Test1",pNode8);
- pNode8 = null;
- }
- // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个左子结点
- // 8
- // 7
- // 6
- // 5
- //
- public static void Test2() {
- System.out.println("\n=====Test2 starts:=====");
- BinaryTreeNode pNode8 = new BinaryTreeNode(8);
- BinaryTreeNode pNode7 = new BinaryTreeNode(7);
- BinaryTreeNode pNode6 = new BinaryTreeNode(6);
- BinaryTreeNode pNode5 = new BinaryTreeNode(5);
- BinaryTreeNode pNode4 = new BinaryTreeNode(4);
- pNode8.connectTreeNodes(pNode7, null);
- pNode7.connectTreeNodes(pNode6, null);
- pNode6.connectTreeNodes(pNode5, null);
- pNode5.connectTreeNodes(pNode4, null);
- Test("Test2",pNode8);
- pNode8 = null;
- }
- // 测试二叉树:出叶子结点之外,左右的结点都有且只有一个右子结点
- // 8
- // 7
- // 6
- // 5
- // 4
- public static void Test3() {
- System.out.println("\n=====Test3 starts:=====");
- BinaryTreeNode pNode8 = new BinaryTreeNode(8);
- BinaryTreeNode pNode7 = new BinaryTreeNode(7);
- BinaryTreeNode pNode6 = new BinaryTreeNode(6);
- BinaryTreeNode pNode5 = new BinaryTreeNode(5);
- BinaryTreeNode pNode4 = new BinaryTreeNode(4);
- pNode8.connectTreeNodes(null, pNode7);
- pNode7.connectTreeNodes(null, pNode6);
- pNode6.connectTreeNodes(null, pNode5);
- pNode5.connectTreeNodes(null, pNode4);
- Test("Test3",pNode8);
- pNode8 = null;
- }
- // 测试空二叉树:根结点为空指针
- public static void Test4() {
- System.out.println("\n=====Test4 starts:=====");
- BinaryTreeNode pNode = null;
- Test("Test4",pNode);
- }
- // 测试只有一个结点的二叉树
- public static void Test5() {
- System.out.println("=====Test5 starts:=====");
- BinaryTreeNode pNode8 = new BinaryTreeNode(8);
- Test("Test5",pNode8);
- pNode8 = null;
- }
- public static void main(String[] args) {
- Test1();
- Test2();
- Test3();
- Test4();
- Test5();
- }
- }
P137、面试题23:从上往下打印二叉树的更多相关文章
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
问题描述: 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 思路: 按照层次遍历的方法,使用队列辅助. 1.将根结点加入队列. 2.循环出队,打印当前元素,若该结点有左子树,则将其加入队列,若 ...
- 剑指offer-面试题23.从上往下打印二叉树
题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...
- 《剑指offer》面试题23 从上往下打印二叉树 Java版
注意层序遍历的时候对每一层的处理方式可能不同,这里把每一层的元素保存进一个List中了,那么就需要记录每一层的数量. public List<List<Integer>> se ...
- 面试题23从上到下打印二叉树+queue操作
//本题思路就是层次遍历二叉树,使用一个队列来模拟过程 /* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *ri ...
- 剑指offer_面试题_从上往下打印二叉树
题目:从上往下打印出二叉树的每一个结点.同一层的结点依照从左到右的顺序打印.比如输入图4.5中的二叉树.则依次打印出8.6.10.5.7.9.11. 8 / \ 6 10 / \ ...
- C++版 - 剑指offer 面试题23:从上往下打印二叉树(二叉树的层次遍历BFS) 题解
剑指offer 面试题23:从上往下打印二叉树 参与人数:4853 时间限制:1秒 空间限制:32768K 提交网址: http://www.nowcoder.com/practice/7fe2 ...
- 【剑指offer 面试题23】从上往下打印二叉树
思路: 没啥好说的,BFS. C++: #include <iostream> #include <queue> using namespace std; struct Tre ...
- 【剑指Offer学习】【面试题23:从上往下打印二叉树】
题目:从上往下打印出二叉树的每一个结点,同一层的结点依照从左向右的顺序打印. 二叉树结点的定义: public static class BinaryTreeNode { int value; Bin ...
- 面试题32 - III. 从上到下打印二叉树 III
面试题32 - III. 从上到下打印二叉树 III 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类 ...
- 【剑指Offer】面试题32 - III. 从上到下打印二叉树 III
题目 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,nu ...
随机推荐
- 压力测试 tpcc-mysql
TPCC-MYSQL是由percona发布一个用来测试数据库的压力工具,模拟一个电商的业务, 主要的业务有新增订单,库存查询,发货,支付等模块的测试 1.下载 2.安装 1.解压 cd scr ; ...
- Linux学习之路一计算机是如何工作的
初次接触MOOC课堂,里面有个很牛X的老师教Linux,恰好自己有兴趣学,顾有了此系列学习博文. 第一讲 计算机是如何工作的 学习Linux,涉及到了C语言和汇编以及操作系统的知识,顾第一讲要讲讲 ...
- position containing block原点
如果元素有属性 'position:absolute',containing block 由最近的 position 不是 static 的祖先建立,按下面的步骤: 1.如果祖先是块级元 ...
- python(六)面向对象
1.封装 支持多重继承,但如果不需要的时候最好不要使用,避免出现不必要的bug: 2.继承 3.多态 4.构造函数 5.私有和共有 在属性前写两个下滑线定义就是私有的
- Android Wear预览版——尝鲜
前两天Google推出了Android Wear的SDK,稍稍的瞧了一眼,发现这个预览版的功能还是比较简单的,只有一个通知转发的功能,不过就这么一个功能,带来的效果却是Very Good~~ 功能:发 ...
- The main roles of LTE eNodeB.
eNB的功能包括: RRM(无线资源管理) IP头压缩 用户数据流加密 UE附着时的MME选择 寻呼信息的调度传输 广播信息的调度传输 设置和提供eNB的测量 CMC(连接移动性控制) 动态资源分配 ...
- Fedora 17安装NFS
1.NFS概述 NFS(Network File System)是一种分布式文件系统,允许网络中的安装不同操作系统的计算机间共享文件和外设,所以它的通讯协定设计与主机及作业系统无关. 它是由SUN公司 ...
- mybatis从dao传入多个参数到sqlmap时dao中要使用map或实例对象(如:user)作为参数传入, 否则报错找不到属性getter方法
23:37 2015-07-02 注意1. 使用mybaits的resultMap查询时, 如果想传入多个参数(比如where 1=1动态多条件查询时)sqlmap文件中对应的方法中, selectL ...
- Java中的break与continue区别
break跳出当前循环执行循环下面的程序, 如果break出现在嵌套循环的内层循环, 则break语句只会跳出当前层的循环; 当程序执行到continue时时, 则跳过本次循环程序重新回到循环开始继续 ...
- 主题: 为kindsoft编辑器替换SyntaxHighlighter代码高亮,整合DEDECMS
作者: fmamcn, 发布日期: 2012-09-29 12:28:39, 浏览数: 1567 看了狼魂发表的将kindeditor中的代码高亮插件prettify换为SyntaxHighlight ...