二叉树的重建

来源:互联网 发布:su for mac 教学视频 编辑:程序博客网 时间:2024/05/22 08:15
问题描述:链接:https://www.nowcoder.com/questionTerminal/8a19cbe657394eeaac2f6ea9b0f6fcf6
来源:牛客网

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回。

/** * Definition for binary tree * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> vin) {        if(vin.size()==0) return NULL;                        int root = pre[0]; //根结点的值        //TreeNode *node = (TreeNode *)malloc(sizeof(TreeNode));        //node->val = root;        TreeNode *node = new TreeNode(root);               /*        int pos = 0; //vin中root的位置        for(;pos<vin.size();pos++)       {            if(vin[pos]==root)                break;        }        */        int pos = std::find(vin.begin(), vin.end(), root) - vin.begin();                vector<int> pre_left,pre_right,vin_left,vin_right;                for(int i=0;i<pos;i++)        {            pre_left.push_back(pre[i+1]);            vin_left.push_back(vin[i]);        }        for(int j=pos+1;j<vin.size();j++)        {            pre_right.push_back(pre[j]);            vin_right.push_back(vin[j]);        }          node->left = reConstructBinaryTree(pre_left,vin_left);              node->right = reConstructBinaryTree(pre_right,vin_right);        return node;    }    };


0 0
原创粉丝点击