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;
        }
    }
  • 相关阅读:
    [ jquery 选择器 :hidden ] 此方法选取匹配所有不可见元素,或者type为hidden的元素
    剑指 Offer 03. 数组中重复的数字 哈希
    LeetCode 1736. 替换隐藏数字得到的最晚时间 贪心
    Leetcode 1552. 两球之间的磁力 二分
    Leetcode 88. 合并两个有序数组 双指针
    LeetCode 1744. 你能在你最喜欢的那天吃到你最喜欢的糖果吗?
    LeetCode 1743. 相邻元素对还原数组 哈希
    LeetCode 1745. 回文串分割 IV dp
    剑指 Offer 47. 礼物的最大价值 dp
    剑指 Offer 33. 二叉搜索树的后序遍历序列 树的遍历
  • 原文地址:https://www.cnblogs.com/zsslll/p/7193513.html
Copyright © 2011-2022 走看看