LintCode 前序遍历和中序遍历树构造二叉树

题目

根据前序遍历和中序遍历树构造二叉树.

注意事项

你可以假设树中不存在相同数值的节点

样例
给出中序遍历:[1,2,3]和前序遍历:[2,1,3]. 返回如下的树:

2
/
1 3

代码

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 */
 
 
public class Solution {
    /**
     *@param preorder : A list of integers that preorder traversal of a tree
     *@param inorder : A list of integers that inorder traversal of a tree
     *@return : Root of a tree
     */
    private int findPosition(int[] arr, int start, int end, int key) {
        int i;
        for (i = start; i <= end; i++) {
            if (arr[i] == key) {
                return i;
            }
        }
        return -1;
    }

    private TreeNode myBuildTree(int[] inorder, int instart, int inend,
            int[] preorder, int prestart, int preend) {
        if (instart > inend) {
            return null;
        }

        TreeNode root = new TreeNode(preorder[prestart]);
        int position = findPosition(inorder, instart, inend, preorder[prestart]);

        root.left = myBuildTree(inorder, instart, position - 1,
                preorder, prestart + 1, prestart + position - instart);
        root.right = myBuildTree(inorder, position + 1, inend,
                preorder, position - inend + preend + 1, preend);
        return root;
    }

    public TreeNode buildTree(int[] preorder, int[] inorder) {
        if (inorder.length != preorder.length) {
            return null;
        }
        return myBuildTree(inorder, 0, inorder.length - 1, preorder, 0, preorder.length - 1);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的概述 树是一种非常常用的数据结构,树与前面介绍的线性表,栈,队列等线性结构不同,树是一种非线性结构 1.树的定...
    Jack921阅读 4,491评论 1 31
  • 今天看了一篇文章,说是女主在婚前买戒指的时候,挑了一个最便宜的! 因为爱对方,所以在经济不宽裕的情况下,尽量为他省...
    恶魔的新娘阅读 650评论 0 1
  • 微小品_风铃 2016.01.08 “叮铃铃,叮铃铃……”风铃唱着欢快的歌。 这是一只很普通的风铃,简单的造型,淡...
    老猫solo阅读 601评论 0 1
  • 一、梯玛膏药的效果及主治范围是哪些? 湘西土家梯玛黑膏药是专治颈、肩、腰、腿关节疼痛的百年老字号膏药。主治颈椎病,...
    陶哥1986阅读 10,416评论 0 2