本文实例为大家分享了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; } } */
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
NowCoder 题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。 例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7 解题思路 使用队列来进行层次遍历。 不需要使用两个队列分别存储当前层的节点和下一层的节点,因为在开始遍历一层的节点时,当前队列中的节点数就是当前层的节点数,只要控制遍历这么多节点数,就能保证这次遍历的都是当前层的节点。 // java public Ar
一、题目 从上往下打印出二叉树的每个结点,同一层的结点按照从左向右的顺序打印。 二、解题思路 这道题实质是考查树的遍历算法。从上到下打印二叉树的规律:每一次打印一个结点的时候,如果该结点有子结点, 则把该结点的子结点放到一个队列的末尾。接下来到队列的头部取出最早进入队列的结点,重复前面的打印操作,直至队列中所有的结点都被打印出来为止。 三、解题代码 public class Test {
我想定义一个返回树节点值列表的函数。列表按级别顺序排列(从上到下,从左到右),如果缺少孩子,则在其位置插入“无”。 这是二叉树实现
问题内容: 如何在Java中打印二进制树,使输出类似于: 我的节点: 问题答案: 我已经创建了简单的二叉树打印机。你可以根据需要使用和修改它,但是仍然没有对其进行优化。我认为很多事情可以在这里得到改善;) 输出1: 输出2:
我一直在尝试从Node切换到Java,我想知道的一件事是如何以类似于Node显示的格式打印对象,例如二叉树。例如,我的二叉树初始化代码如下: 在节点中,此二叉树将显示如下: 然而在Java,当我做system.out.println(树); 输出->BinaryTree@4554617c 什么是打印我的BinaryTree的正确方法?什么是好方法?有没有一种方法可以用JSON格式打印树?
一、题目 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印一行。 二、解题思路 用一个队列来保存将要打印的结点。为了把二叉树的每一行单独打印到一行里,我们需要两个变量:一个变量表示在当前的层中还没有打印的结点数,另一个变量表示下一层结点的数目。 三、解题代码 public class Test { private static class BinaryTreeNode