码迷,mamicode.com
首页 > 其他好文 > 详细

[leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal

时间:2017-08-10 22:40:08      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:new   数组   etc   log   else   构建   tree   遍历   获取   

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 TreeNode buildTree(int[] preorder, int[] inorder) {
        return build(preorder,0,preorder.length-1,inorder,0,inorder.length-1);
    }
    public TreeNode build(int[] preorder,int preSta,int preEnd,int[] inorder,int inSta,int inEnd)
    {
        //到叶节点返回
        if (preSta > preEnd || inSta > inEnd)
        {
            return null;
        }
        else
        {
            //获取此次的根节点下标
            int index = 0;
            for (int i = inSta; i <= inEnd; i++) {
                if (inorder[i] == preorder[preSta])
                {
                    index = i;
                    break;
                }
            }
            //左子树和右子树的长度
            int len1 = index - inSta-1;
            int len2 = inEnd - index-1;
            //当前树
            TreeNode cur = new TreeNode(preorder[preSta]);
            //当前树的左右子树又递归求得
            cur.left = build(preorder,preSta+1,preSta+1+len1,inorder,inSta,index-1);
            cur.right = build(preorder,preEnd-len2,preEnd,inorder,index+1,inEnd);
            return cur;
        }

    }

 

 

[leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal

标签:new   数组   etc   log   else   构建   tree   遍历   获取   

原文地址:http://www.cnblogs.com/stAr-1/p/7341278.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!