题解 | #重建二叉树#

重建二叉树

https://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6

/**
 * Definition for binary tree
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 * };
 */
#include <vector>
class Solution {
public:
    void p(TreeNode* t) {
        if (t) {
            cout << t->val << " ";
            p(t->left);
            p(t->right);
        }
    }
    TreeNode* create(vector<int> pre, int l1, int r1, vector<int> in, int l2, int r2) {
        int mid;
        for (int i = 0; i < in.size(); i++) {
            if (in[i] == pre[l1]) {
                mid = i;
                break;
            }
        }
        TreeNode* node = new TreeNode(pre[l1]);
        int llen = mid - l2;
        int rlen = r2 - mid;
        if (llen > 0) {
            node->left = create(pre, l1 + 1, l1 + llen, in, l2, l2 + llen - 1);
        }
        else node->left = nullptr;
        if (rlen > 0) {
            node->right = create(pre, l1 + 1 + llen, r2, in, l2 + llen + 1, r2);
        }
        else node->right = nullptr;
        return node;
    }
    TreeNode* reConstructBinaryTree(vector<int> pre, vector<int> vin) {
        if (pre.size() == 0) return nullptr;
        return create(pre, 0, pre.size()-1, vin, 0, vin.size()-1);
    }
};

全部评论

相关推荐

球Offer上岸👑:可能是大环境太差了 太卷了 学历也很重要 hc也不是很多 所以很难
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务