• 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;
        }
    }
  • 相关阅读:
    web常用自动化库——selenium总结
    python协程总结
    python多进程总结
    python多线程总结
    Scrapy进阶知识点总结(六)——中间件详解
    Git用法总结
    Scrapy进阶知识点总结(五)——Settings
    Scrapy进阶知识点总结(四)——Item Pipeline
    Scrapy进阶知识点总结(三)——Items与Item Loaders
    Scrapy进阶知识点总结(二)——选择器Selectors
  • 原文地址:https://www.cnblogs.com/zsslll/p/7193513.html
Copyright © 2020-2023  润新知