美文网首页
面试题7:重建二叉树

面试题7:重建二叉树

作者: scott_alpha | 来源:发表于2019-10-04 22:05 被阅读0次

题目:输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6}。二叉树的几点定义如下:

class BinaryTreeNode{
    int value
    BinaryTreeNode left;
    BinaryTreeNode right;
}

思路:前序遍历获取根节点,中序遍历获取左、右子树的值,接着递归构建左、右子树。
解决方案:

public class Question7 {
    static class BinaryTreeNode {
        private final int value;
        BinaryTreeNode left;
        BinaryTreeNode right;
        public BinaryTreeNode(int value){
            this.value = value;
        }
    }

    private static BinaryTreeNode constructCore(int[] preorder, int startPre, int endPre, int[] inorder, int startIn ,int endIn) {
        if (startPre > endPre || startIn > endIn) return null;
        // 通过前序遍历获取根节点
        BinaryTreeNode root = new BinaryTreeNode(preorder[startPre]);

        for (int i = 0; i<= inorder.length-1; i++){
            if (preorder[startPre] == inorder[i]){
                // 通过中序遍历获取左右子树
                root.left = constructCore(preorder, startPre + 1, startPre + i - startIn, inorder, startIn, i - 1);
                root.right = constructCore(preorder, i - startIn + startPre + 1, endPre, inorder, i + 1, endIn);
                break;
            }
        }
        return root;
    }

    // 前序遍历打印二叉树
    public static void preOrder(BinaryTreeNode binaryTreeNode){
        if (binaryTreeNode == null) return;
        System.out.println(binaryTreeNode.value);
        if (binaryTreeNode.left != null){
            preOrder(binaryTreeNode.left);
        }
        if (binaryTreeNode.right != null){
            preOrder(binaryTreeNode.right);
        }
    }

    public static void main(String[] args) {
        int[] preOrder = new int[]{1,2,4,7,3,5,6,8};
        int[] inOrder = new int[]{4,7,2,1,5,3,8,6};
        preOrder(constructCore(preOrder, 0, preOrder.length - 1, inOrder, 0, inOrder.length - 1));
    }
}

相关文章

  • 重建二叉树

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

  • 剑指Offer-二叉树

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

  • 2.3.4 树

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

  • LeetCode | 面试题07. 重建二叉树【剑指Offer】

    LeetCode 面试题07. 重建二叉树【剑指Offer】【Medium】【Python】【二叉树】【递归】 问...

  • 剑指offer第二版-7.重建二叉树

    本系列导航:剑指offer(第二版)java实现导航帖 面试题7:重建二叉树 题目要求:根据二叉树的前序遍历和中序...

  • 面试题7:重建二叉树

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

  • 面试题7:重建二叉树

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

  • 面试题7:重建二叉树

  • 面试题7:重建二叉树

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

  • 面试题7: 重建二叉树

网友评论

      本文标题:面试题7:重建二叉树

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