重建二叉树

来源:互联网 发布:mac切换语言快捷键 编辑:程序博客网 时间:2024/06/05 08:40
class Solution {public:    struct TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> in) {        return rebulidBinaryTree(pre, in);    }    static TreeNode* rebulidBinaryTree(vector<int>pre, vector<int>in){        if (pre.size() == 0 || in.size() == 0){            return NULL;        }        //获取根节点        TreeNode* root = new TreeNode(pre[0]);        //查找根节点在中序遍历中的位置        int cur = -1;        for (int i = 0; i < in.size(); i++){            if (pre[0] == in[i]){                cur = i;                break;            }        }        if (cur == -1){            return NULL;        }        //构建左子树        vector<int> lin;        for (int i = 0; i < cur; i++){            lin.push_back(in[i]);        }        vector<int> lpre;        for (int i = 1; i < lin.size() + 1; i++){            lpre.push_back(pre[i]);        }        root->left = rebulidBinaryTree(lpre, lin);        //构建右子树        vector<int> rin;        for (int i = cur+1; i < in.size(); i++){            rin.push_back(in[i]);        }        vector<int> rpre;        for (int i = 1+lin.size(); i < pre.size() ; i++){            rpre.push_back(pre[i]);        }        root->right = rebulidBinaryTree(rpre, rin);        return root;    }};
原创粉丝点击