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

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(TreeNode pRoot) {
        ArrayList<ArrayList<Integer>> arrayList = new ArrayList<ArrayList<Integer>>();
        if(pRoot == null){
            return arrayList;
        }
        Queue<TreeNode> q1 = new LinkedList<TreeNode>();
        q1.add(pRoot);
        Queue<TreeNode> q2 = new LinkedList<TreeNode>();
        while(!q1.isEmpty() || !q2.isEmpty()){
            if(!q1.isEmpty()){
                ArrayList<Integer> list = new ArrayList<Integer>();
                while(!q1.isEmpty()){
                   TreeNode node = q1.poll();
                    list.add(node.val);
                    if(node.left != null){
                        q2.add(node.left);
                    }
                    if(node.right != null){
                        q2.add(node.right);
                    }
                }
                arrayList.add(list);
            }else{
                ArrayList<Integer> list = new ArrayList<Integer>();
                while(!q2.isEmpty()){
                    TreeNode node = q2.poll();
                    list.add(node.val);
                    if(node.left != null){
                        q1.add(node.left);
                    }
                    if(node.right != null){
                        q1.add(node.right);
                    }
                }
                arrayList.add(list);
            }
        }
        return arrayList;
    }

}

原文地址:https://www.cnblogs.com/q-1993/p/10966485.html

时间: 2024-10-10 04:20:54

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

16.输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4261605.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印. 题目分析:可以用一个LinkedList的数据结构模拟队列来完成此操作.传入树

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

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

树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

输入一棵二元树,从上往下按层打印每个节点,每层从左往右打印。利用队列。

mport java.util.ArrayDeque; class TreeNode { TreeNode left; TreeNode right; int val; TreeNode(int x) { val = x; } } public class test { public void print(TreeNode root) { ArrayDeque<TreeNode> queue = new ArrayDeque<>(); if(root == null) { retu

【36】按层打印二叉树

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

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

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

按层打印二叉树

思路:用队列保存二叉树的层节点,不断地从中弹出节点.每一次都用新的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; } }

【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 (二)分行从上到下打印二叉树 从上到下按层打印二叉树,同一层的结点按从左到右的顺序打印,每一层打印到一行. 比如下面二叉树,输出