Java实现给你一个数组,生成一个对应的二叉树

标题:Java实现给你一个数组,生成一个对应的二叉树

测试用例:
在这里插入图片描述

用的是层次遍历的思想:
层次遍历,一种不带返回值的,一种带返回值的【比前一种多了些思考】

层次遍历的代码:

//层次遍历
    public void levelOrder(TreeNode root){
//        Deque s = new LinkedList<>();
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);

        while(!q.isEmpty()){
            TreeNode p = q.poll();
            System.out.print(p.val + " ");
            if(p.left != null){
                q.offer(p.left);
            }
            if(p.right != null){
                q.offer(p.right);
            }
        }
    }

    public List<List<Integer>> levelOrder02(TreeNode root) {
        List<List<Integer>> ret = new ArrayList<>();
        if(root == null){
            return ret;
        }
        Queue<TreeNode> q = new LinkedList<>();
        q.offer(root);
        TreeNode p = null;
        List<Integer> list = null;

        while(!q.isEmpty()){
            int len = q.size();
            list = new ArrayList<>();
            for(int i = 0;i < len;i++){ //q.size(),此处会不断的改变,所以细节
                p = q.poll();
                System.out.print(p.val + " ");
                list.add(p.val);
                if(p.left != null){
                    q.offer(p.left);
                }
                if(p.right != null){
                    q.offer(p.right);
                }
            }
            ret.add(list);
        }

        return ret;
    }

完整代码如下:

public TreeNode generateTree(Integer[] nums){
        if(nums == null || nums.length == 0){
            return null;
        }
        Queue<TreeNode> q = new LinkedList<>();
        TreeNode root = new TreeNode(nums[0]);
        q.offer(root);
        int k = 1;

        while(k < nums.length){
            int size = q.size();
            for(int i = 0;i < size;i++){
                TreeNode p = q.poll();
                if(nums[k] != null){
                    TreeNode node = new TreeNode(nums[k]);
                    p.left = node;
                    q.offer(node);
                }else{
                    p.left = null;
                }
                k++;
                if(nums[k] != null){
                    TreeNode node = new TreeNode(nums[k]);
                    p.right = node;
                    q.offer(node);
                }else{
                    p.right = null;
                }
                k++;
            }
        }

        return root;
    }

你可能感兴趣的:(#,树,leetcode,算法,职场和发展)