java编程题之从上往下打印出二叉树

本文实例为大家分享了java从上往下打印出二叉树的具体代码,供大家参考,具体内容如下

github:剑指offer编程全部试题

import java.util.ArrayList;
import java.util.Stack;

/**
 *
 * 剑指offer编程题(JAVA实现)——第22题:从上往下打印出二叉树
 *
 * 题目描述
 * 从上往下打印出二叉树的每个节点,同层节点从左至右打印。
 *
 */
public class Test22 {

 ArrayList<Integer> arrayList = new ArrayList<>();
 // 每层依次入栈
 Stack<TreeNode> stack1 = new Stack<>();
 // 从stack1出栈的元素依次加入stack2,统一通过stack2找到他们的字节点并压入stack1
 Stack<TreeNode> stack2 = new Stack<>();

 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {

 if (root == null) {
 return arrayList;// 空则返回
 }
 stack1.push(root);
 while (!stack1.isEmpty()) {
 while (!stack1.isEmpty()) {
 TreeNode tmp = stack1.pop();
 arrayList.add(tmp.val);
 stack2.push(tmp);
 }
 while (!stack2.isEmpty()) {
 TreeNode tmp2 = stack2.pop();
 // 从左到右打印,所以右子树先入栈
 if (tmp2.right != null) {
 stack1.push(tmp2.right);
 }
 if (tmp2.left != null) {
 stack1.push(tmp2.left);
 }
 }
 }

 return arrayList;

 }

 public class TreeNode {
 int val = 0;
 TreeNode left = null;
 TreeNode right = null;

 public TreeNode(int val) {
 this.val = val;

 }
 }

}
//其他方法
/**
public class Solution {
 public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
  ArrayList<Integer> list = new ArrayList<Integer>();
  if(root == null) return list;
  Deque<TreeNode> deque = new LinkedList<TreeNode>();

  deque.add(root);
  while(!deque.isEmpty()){
  TreeNode t = deque.pop();
  list.add(t.val);
  if(t.left != null) deque.add(t.left);
  if(t.right != null) deque.add(t.right);
  }
  return list;
 }
}
*/

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Java实现打印二叉树所有路径的方法

    本文实例讲述了Java实现打印二叉树所有路径的方法.分享给大家供大家参考,具体如下: 问题: 给一个二叉树,把所有的路径都打印出来. 比如,对于下面这个二叉树,它所有的路径为: 8 -> 3 -> 1 8 -> 2 -> 6 -> 4 8 -> 3 -> 6 -> 7 8 -> 10 -> 14 -> 13 思路: 从根节点开始,把自己的值放在一个数组里,然后把这个数组传给它的子节点,子节点同样把自己的值放在这个数组里,又传给自己的子节点,

  • java编程题之从上往下打印出二叉树

    本文实例为大家分享了java从上往下打印出二叉树的具体代码,供大家参考,具体内容如下 github:剑指offer编程全部试题 import java.util.ArrayList; import java.util.Stack; /** * * 剑指offer编程题(JAVA实现)--第22题:从上往下打印出二叉树 * * 题目描述 * 从上往下打印出二叉树的每个节点,同层节点从左至右打印. * */ public class Test22 { ArrayList<Integer> arra

  • PHP实现从上往下打印二叉树的方法

    本文实例讲述了PHP实现从上往下打印二叉树的方法.分享给大家供大家参考,具体如下: 问题 从上往下打印出二叉树的每个节点,同层节点从左至右打印. 解决思路 每层树从左到右打印,所以需要将节点的左右子树存起来,因为先进先出,所以用队列. 实现代码 /*class TreeNode{ var $val; var $left = NULL; var $right = NULL; function __construct($val){ $this->val = $val; } }*/ function

  • java编程题之顺时针打印矩阵

    本文实例为大家分享了java顺时针打印矩阵的具体代码,供大家参考,具体内容如下 github:剑指offer编程题 import java.util.ArrayList; /** * * 剑指offer编程题(JAVA实现)--第19题:顺时针打印矩阵 * * 题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如, 如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,1

  • java编程题之合并两个排序的链表

    本文实例为大家分享了java合并两个排序的链表,供大家参考,具体内容如下 /** * * 剑指offer编程题(JAVA实现)--第16题:合并两个排序的链表 * * 输入两个单调递增的链表,输出两个链表合成后的链表, 当然我们需要合成后的链表满足单调不减规则. * */ public class Test16 { public static ListNode Merge(ListNode list1, ListNode list2) { if (list1 == null) { // 首先判断

  • Java根据正整数的位数并逆序打印出各位数字

    题目:给一个不多于5位的正整数,要求:一.求它是几位数,二.逆序打印出各位数字. 程序设计: import java.util.Scanner; public class Ex24 { public static void main(String[] args) { Ex24 tn = new Ex24(); Scanner s = new Scanner(System.in); long a = s.nextLong(); if(a < 0 || a > 100000) { System.o

  • Java编程打印购物小票实现代码

    简单介绍运行环境: 语言:Java 工具:eclipse 系统:Windows7 (打印设备暂时没有,所以只能提供预览图) 最近,项目需要为商城做一个购物小票的打印功能,日常我们去超市买东西,结账的时候收银员都会打印一个小票,一般的商城也都需要这样的一个小功能,本文给出的 demo 是在 58mm 的热敏打印机下的例子,如果是其他纸张类型的打印机,调整纸张宽度即可. package test; import java.awt.*; import java.awt.print.*; /** * 打

  • Java网络编程TCP实现文件上传功能

    本文实例为大家分享了Java网络编程TCP实现文件上传的具体代码,供大家参考,具体内容如下 上一篇博客,用网络编程TCP 实现聊天,这次实现文件上传. 客户端: package com.kuang.lesson02; import java.io.*; import java.net.InetAddress; import java.net.Socket; //客户端 public class TcpClientDemo2 { public static void main(String[] a

  • Java编程之如何通过JSP实现头像自定义上传

    目录 开发概述 开发环境 开发过程 1.JSP前台页面 样式图: JS操作 2.数据库的设计 数据库表: 实体类:UsersInfo.java 3.数据库操作 UsersMapper UsersMapper.xml 4.Servlet 5.工具类 DownloadImage:下载指定路径下的文件到本地指定目录 TimeRandom:生成年月日时分秒+8位随机数 6.最终效果展示 总结 开发概述 本次项目意在实现一种可以在本地选择图片,然后将其上传至服务器指定文件目录下,并可以通过服务器自动生成的

  • java编程下字符串的16位,32位md5加密实现方法

    如下所示: package cn.sunzn.md5; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; public class Str2MD5 { public static void main(String[] args) { MD5("sunzn"); } private static String MD5(String sourceStr) { String r

  • Java编程基于快速排序的三个算法题实例代码

    快速排序原理简介 快速排序是我们之前学习的冒泡排序的升级,他们都属于交换类排序,都是采用不断的比较和移动来实现排序的.快速排序是一种非常高效的排序算法,它的实现,增大了记录的比较和移动的距离,将关键字较大的记录从前面直接移动到后面,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数.同时采用"分而治之"的思想,把大的拆分为小的,小的拆分为更小的,其原理如下:对于给定的一组记录,选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,

随机推荐