LeetCode之通过二叉树的中序遍历和前序遍历来还原二叉树

来源:互联网 发布:人工智能 情绪 编辑:程序博客网 时间:2024/05/22 02:08

问题描述:

/** * Given preorder and inorder traversal of a tree, construct the binary tree. *  * Note: *  * You may assume that duplicates do not exist in the tree. */

根据给出的二叉树的中序遍历和前序遍历的结果,来还原这棵二叉树,假定这个二叉树没有重复的孩子。
这个问题和我的前面一篇博文一样。前面那篇是根据中序和后序来还原二叉树,所以只要换几个参数即可。建议先看一下我的前面那篇博文。代码如下:

public static TreeNode buildTree(int[] inorder, int[] preorder) {        return buildTree(inorder, 0, inorder.length - 1, preorder, 0,                preorder.length - 1);    }    public static TreeNode buildTree(int[] inorder, int is, int ie, int[] preorder,            int ps, int pe) {        if (is > ie || ps > pe)            return null;        int rootVal = preorder[ps];        TreeNode root = new TreeNode(rootVal);        for (int i = is; i <= ie; i++) {            if (inorder[i] == rootVal) {                TreeNode left = buildTree(inorder, is, i - 1, preorder, ps+1, ps+ i - is );                TreeNode right = buildTree(inorder, i + 1, ie, preorder, pe- ie + i+1, pe );                root.left = left;                root.right = right;            }        }        return root;    }

换参数的地方就是在preorder序列中寻找左右子树范围的地方。

0 0
原创粉丝点击