[牛客]有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

来源:互联网 发布:手机乐园java手机版 编辑:程序博客网 时间:2024/06/05 23:44

有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。

给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。


import java.util.*;



/*
public class TreeNode {
    int val = 0;
    TreeNode left = null;
    TreeNode right = null;
    public TreeNode(int val) {
        this.val = val;
    }
}*/
public class TreePrinter {
    public int[][] printTree(TreeNode root) { 
        int index = 0;   
        ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
        ArrayList<Integer> temp = new ArrayList<Integer>();
        TreeNode left = root , right = root;
        Queue<TreeNode> q = new LinkedList<TreeNode>();
        q.add(root); 
        while(q.peek() != null){  
            if(q.peek().left != null){
                q.add(q.peek().left); 
                left = q.peek().left;
            }
            if(q.peek().right != null){
                q.add(q.peek().right); 
                left = q.peek().right;
            } 
            TreeNode aNode = q.remove();
            temp.add(aNode.val); 
            if(right == aNode){ 
               right = left;
            if(temp.size() > 0){ 
               list.add(temp); 
               }
               temp = new ArrayList<Integer>(); 
            } 
        } 
        //转换数组
        int[][] result = new int[list.size()][];
        for(int i = 0 ; i < list.size() ; i++){
            temp = list.get(i);
            result[i] = new int[temp.size()];
            for(int j = 0 ; j < temp.size() ;j++){
                result[i][j] = temp.get(j); 
            }
        }
        
        return result;
    }

}

----------------------------------带测试用例--------------------------------

package test;import java.util.ArrayList;import java.util.LinkedList;import java.util.List;public class test {public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}    public int[][] printTree(TreeNode root) {    if(root == null) return null;        List<ArrayList<TreeNode>> list = new ArrayList<ArrayList<TreeNode>>();        ArrayList<TreeNode> temp = new ArrayList<TreeNode>();        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();        TreeNode last = root ;        TreeNode nlast = root ;        queue.push(root);         while(queue.peek() != null ){              if(queue.peek().left != null){                queue.add(queue.peek().left);                nlast = queue.peek().left;            }             if(queue.peek().right != null){                queue.add(queue.peek().right);                nlast = queue.peek().right;            }             if(last == queue.peek()){                 temp.add(queue.pop());                list.add(temp);                temp = new ArrayList<TreeNode>();                last = nlast;            }else{                temp.add(queue.pop());              }        }                int[][] result = new int[list.size()][];        int index = 0 ;        for(ArrayList<TreeNode> node_list : list){        result[index] = new int[node_list.size()];        int index1 = 0;        for(TreeNode node : node_list){        result[index][index1] = node.val;         index1++;        }        index++;         }        return result;    }        public static void main(String[] a){    test t = new test();    TreeNode a1 = t.new TreeNode(1);    TreeNode a2 = t.new TreeNode(2);    TreeNode a3 = t.new TreeNode(3);    TreeNode a4 = t.new TreeNode(4);    TreeNode a5 = t.new TreeNode(5);    TreeNode a6 = t.new TreeNode(6);    TreeNode a7 = t.new TreeNode(7);    TreeNode a8 = t.new TreeNode(8);    a1.left=a2;    a1.right=a3;    a2.left=a4;    a3.left=a5;    a3.right=a6;    a5.left=a7;    a5.right=a8;    t.printTree(a1);    }}



1 0
原创粉丝点击