zoukankan      html  css  js  c++  java
  • java宽度优先将二叉树存成数组

    题目:

    有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。给定二叉树的根结点root,

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

    解题思路:

    类似上一篇文章中的思路

    源码:

    package ss.entity;
    
    public class TreeNode {
        int val;
        TreeNode left;
        TreeNode right;
        
        public int getVal() {
            return val;
        }
    
        public void setVal(int val) {
            this.val = val;
        }
    
        public TreeNode getLeft() {
            return left;
        }
    
        public void setLeft(TreeNode left) {
            this.left = left;
        }
    
        public TreeNode getRight() {
            return right;
        }
    
        public void setRight(TreeNode right) {
            this.right = right;
        }
    
        public TreeNode(int x) { val = x; }
        
        public boolean equals(Object obj) {
            return super.equals(obj);
        }
    }
    package ss.tree;
    
    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    
    import ss.entity.TreeNode;
    
    /**
     * 有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。
     * 给定二叉树的根结点root,
     * 请返回打印结果,
     * 结果按照每一层一个数组进行储存,
     * 所有数组的顺序按照层数从上往下,
     * 且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。
     * */
    public class TreeDemo03 {
        public static void main(String[] args){
            TreeNode tree = new TreeNode(1);
            tree.setLeft(new TreeNode(2));
            tree.setRight(new TreeNode(3));
            
            tree.getLeft().setLeft(new TreeNode(4));
            
            tree.getRight().setLeft(new TreeNode(5));
            tree.getRight().setRight(new TreeNode(6));
            
            tree.getRight().getLeft().setLeft(new TreeNode(7));
            tree.getRight().getLeft().setRight(new TreeNode(8));
            
            int[][] a = TreeDemo03.printTree(tree);
            for(int[] b : a){
                for(int c : b){
                    System.out.print(c);
                }
                System.out.println();
            }
        }
        public static int[][] printTree(TreeNode root) {
            TreeNode last = root;
            TreeNode nlast = null;
            Queue queue = new LinkedList();
            queue.add(root);
            
            List<List> list = new ArrayList<List>();
            List<Integer> temp = new ArrayList<Integer>(); 
            int maxWidth = 0; 
            while(!queue.isEmpty()){
                TreeNode tempNode = (TreeNode)queue.poll();
                temp.add(tempNode.getVal());
                if(null != tempNode.getLeft()){
                    queue.add(tempNode.getLeft());
                    nlast = tempNode.getLeft();
                }
                if(null != tempNode.getRight()){
                    queue.add(tempNode.getRight());
                    nlast = tempNode.getRight();
                }
                if(tempNode.equals(last)){
                    last = nlast;
                    list.add(temp);
                    if(temp.size() > maxWidth)
                        maxWidth = temp.size();
                    temp = new ArrayList<Integer>();
                }else{
                    continue;
                }
            }
            int[][] result = new int[list.size()][maxWidth];
            for(int i = 0; i < list.size(); i++){
                List<Integer> ll = list.get(i);
                for(int j = 0; j < list.get(i).size(); j++){
                    result[i][j] = ll.get(j);
                }
            }
            return result;
        }
    }
  • 相关阅读:
    设置zookeeper开机自启动
    安装zookeeper
    Elasticsearch 5.6.5 安装head插件
    [redis] Node is not empty. Either the node already knows other nodes
    【redis】 redis 创建集群时,Waiting for the cluster to join.... 一直等待
    [redis] redis.clients.jedis.exceptions.JedisDataException: MOVED 13102 127.0.0.1
    [linux] FastDFS访问文件,400 Bad Request
    [linux] Nginx编译安装错误error: the HTTP rewrite module requires the PCRE library
    [java] java解析txt文件
    【java】 java 解压tar.gz读取内容
  • 原文地址:https://www.cnblogs.com/zsslll/p/7193513.html
Copyright © 2011-2022 走看看