美文网首页
面试题B2: 二叉树层序遍历与重建

面试题B2: 二叉树层序遍历与重建

作者: mark_x | 来源:发表于2019-10-17 16:22 被阅读0次

package cn.zxy.interview.utils;

import java.util.LinkedList;

public class UtilsTree {
    /**
     * 根据层序遍历 生成二叉树
     * @param arr
     * @return
     */
    public static TreeNode arrayToTree(Integer[] arr){
        //使用队列遍历二叉树  队列的使用offer(加入新节点)/poll(返回并删除队首元素)
        LinkedList<TreeNode> queue = new LinkedList<>();

        //创建根节点
        TreeNode root = new TreeNode(arr[0]);
        //节点入队列
        queue.push(root);

        int i = 1;
        while(i < arr.length){
            //从数组中取出值
            Integer value = arr[i];
            //从队列中弹出元素
            TreeNode node = queue.poll();
            if(value != null){
                //创建左孩子节点, 放入队列, 填充value
                TreeNode leftNode = new TreeNode(value);
                queue.offer(leftNode);
                node.left = leftNode;
            }
            // 取出数组下一个元素
            i++;
            if(i >= arr.length) break;
            value = arr[i];

            if(value != null){
                //创建右孩子
                TreeNode rightNode = new TreeNode(value);
                queue.offer(rightNode);
                node.right = rightNode;
            }
            i++;
        }
        return root;
    }

    public static void levelOrderShow(TreeNode root){
        //1.创建队列, 用于存储节点
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        //2.初始化 根节点入队列
        queue.offer(root);

        //3.从队列中取元素 只要只要队列不为空, 就继续进行迭代
        while(!queue.isEmpty()){
            //从队列中取出节点
            TreeNode node = queue.poll();
            System.out.println(node.value);
            //检查左右孩子节点 如果有 入队列
            if(node.left != null){
                queue.offer(node.left);
            }
            if(node.right != null){
                queue.offer(node.right);
            }
        }
    }
    

    public static void main(String[] args) {
        Integer[] arr = {3,4,5,1,2,6,1};
        TreeNode root = arrayToTree(arr);
        levelOrderShow(root);

    }
}

相关文章

  • 剑指Offer-二叉树

    面试题7:重建二叉树 题目: 输入某二叉树的前序遍历和中序遍历的结果。请重建该二叉树。假设输入的前序遍历和中序遍历...

  • 2.3.4 树

    面试题7:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 重建二叉树

    《剑指offer》面试题7:重建二叉树 题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前...

  • 重建二叉树与寻找下一个节点

    一、重建二叉树 题目:输入某二叉树的先序遍历和中序遍历的结果,请重建二叉树。假如输入的先序遍历和中序遍历的结果都不...

  • 07:重建二叉树

    题目07:重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 《剑指offer》— JavaScript(4)重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 面试题07. 重建二叉树

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中...

  • 《剑指offer》(四)-重建二叉树(java)

    重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果...

  • 剑指offer刷题(二)

    一.重建二叉树 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不...

网友评论

      本文标题:面试题B2: 二叉树层序遍历与重建

      本文链接:https://www.haomeiwen.com/subject/xtkvmctx.html