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

Construct Binary Tree from Preorder and Inorder Traversal

时间:2016-05-08 19:53:25      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:

题目:从一棵树的前序和中序遍历结果构建一棵树。

前序遍历结果的第一个结点是树的根节点;在中序遍历结果中,根节点的左边是树的左子树,右边是树的右子树。然后再重新确定左子树和右子树的范围,递归寻找左子树和右子树的根节点。

TreeNode* buildSubTree(vector<int>& preorder,vector<int>& inorder,int pre_start,int pre_end,int in_start,int in_end){
        if(pre_start>pre_end)
            return NULL;
        TreeNode* root=new TreeNode(preorder[pre_start]);
        int i=in_start;
        while(i<=in_end&&inorder[i]!=preorder[pre_start])
            i++;
        int pos=i;
        int leftlength=pos-in_start;
        root->left=buildSubTree(preorder,inorder,pre_start+1,pre_start+leftlength,in_start,pos-1);
        root->right=buildSubTree(preorder,inorder,pre_start+leftlength+1,pre_end,pos+1,in_end);
        return root;
        
    }
    
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if(preorder.size()==0||inorder.size()==0)
            return NULL;
        return buildSubTree(preorder,inorder,0,preorder.size()-1,0,inorder.size()-1);
    }

这里需要注意的是递归终止条件:pre_start>pre_end.

Construct Binary Tree from Preorder and Inorder Traversal

标签:

原文地址:http://www.cnblogs.com/summerkiki/p/5471133.html

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