按层打印二叉树

思路:用队列保存二叉树的层节点,不断地从中弹出节点。每一次都用新的temp变量保存当前层的第一个节点

        

import java.util.ArrayList;
import java.util.LinkedList;
/**
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> res = new ArrayList<Integer>();
        if(root == null){
            return res;
        }
        ArrayList<TreeNode> queue = new ArrayList<>();
        queue.add(root);
        while(!queue.isEmpty()){
            TreeNode temp = queue.remove(0);
            if(temp.left != null){
                queue.add(temp.left);
            }
            if(temp.right != null){
                queue.add(temp.right);
            }
            res.add(temp.val);
        }
        return res;
    }
}
时间: 2024-11-03 16:11:02

按层打印二叉树的相关文章

按层打印二叉树--每行打印一层

一,问题介绍 给定一棵二叉树,按照层序遍历的顺序打印二叉树.但是要求,每一行打印一层数据. 二,算法分析 借助二叉树的层序遍历来实现.但是需要额外两个变量.一个变量用来保存当前层 还未打印的结点个数,另一个变量保存下一层待打印的结点个数. 二叉树层序遍历参考:http://www.cnblogs.com/hapjin/p/5409921.html 层序打印参考: 1 public void printTree(BinaryNode<T> root){ 2 if(root == null) 3

【36】按层打印二叉树

算法题目大都比较抽象,可以通过举例子来搞清楚具体的逻辑. 题目: 从上到下,按照从左往右打印二叉树每一层的结点. 二叉树的结点: class BinaryTreeNode{ int mValue; BinaryTreeNode mLeft;; BinaryTreeNode mRight; } 思路: 我们发现规律:先遍历的结点,它的子节点也会先被遍历到,是一个先进先出的模型,考虑用队列来实现. 没遍历一个结点时候,就把它的孩子结点取出来,放到队列的尾部,然后重复这个过程,直到队列为空. 代码:

从上到下按层打印二叉树,每层打印顺序从左到右

1 class Solution{ 2 public : 3 vector<int> PrintFromTopToBottom(TreeNode* root){ 4 vector<int> vec; 5 queue<TreeNode*> Q; 6 if(root==NULL) return vec; 7 Q.push(root); 8 while(!Q.empty()) 9 { 10 TreeNode* p = Q.front(); 11 Q.pop(); 12 vec

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

import java.util.ArrayList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ import java.util.*; public class Solution { ArrayList<ArrayList<Integer> > Print

树5:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

分析:层次遍历的经典算法 import java.util.ArrayList; import java.util.*; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer&g

二叉树按层打印,并且按层换行的方法

经常有一些是按层打印二叉树,这类问题的关键就在于,什么时候换行的问题. 这个问题在牛客网的讲解让我头很大,也不太懂.碰巧剑指offer里面有这个题,里面的解析就清楚明了多了. 首先构造一个队列,设置两个属性一个 nowline初始化为0,用来保存当前打印的行的还没被打印的元素个数. 设置另一个变量nextline变量用来保存下一行总共的元素个数,初始化为0. 以上图为例, 第一步:新建一个队列,设置nowline=1,nextline=0,. 第二步:将头结点的内容A加入到队列当中,这时从队列弹

【Java】 剑指offer(31)从上往下打印二叉树

本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 (一)从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. (二)从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行. (三)请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 思路 (一)不分行从上往下打印二叉树:该题即为对二叉树的层

剑指Offer对答如流系列 - 从上往下打印二叉树

面试题32:从上往下打印二叉树 题目描述 树的结构定义如下: public class Node{ int e; Node left; Node right; Node(int x) { e = x; } } (一)不分行从上到下打印二叉树 从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印. 比如下面二叉树,输出顺序为 8 6 10 5 7 9 11 (二)分行从上到下打印二叉树 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行. 比如下面二叉树,输出

按层换行打印二叉树

题目描述:  二叉树,按层打印,并且每层换行 分析:  我们知道,二叉树的层序遍历需要借助队列来实现,每取出一个节点打印,并将该节点的左右孩子放入队列中,依此反复,直到队列为空时,也就完成了二叉树的按层打印. 基本过程如图所示: 但是,关键是怎么换行? 分析:要换行则需要知道什么时候换行,由二叉树我们可以分析,我们需要知道每一层最右边的节点,每次打印完这个节点的值后,再打印一个换行即可.于是我们这样做: 定义两个变量,last 和 nlast last : 表示正在打印的当前行的最右节点 nla