leetcode 105. 从前序与中序遍历序列构造二叉树

106 阅读1分钟

c++

class Solution {
public:
    int findnum(vector<int> &inorder, int num) {
        for (int i = 0; i < inorder.size(); i++) {
            if (inorder[i] == num) return i;
        }
        return 0;
    }

    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        if (preorder.size() == 0) return nullptr;
        int pos = findnum(inorder, preorder[0]);
        vector<int> preorderl, inorderl;
        vector<int> preorderr, inorderr;
        for (int i = 0; i < pos; i++) {
            preorderl.push_back(preorder[i + 1]);
            inorderl.push_back(inorder[i]);
        }
        for (int i = pos + 1; i < preorder.size(); i++) {
            preorderr.push_back(preorder[i]);
            inorderr.push_back(inorder[i]);
        }
        TreeNode *node = new TreeNode(preorder[0], buildTree(preorderl, inorderl), buildTree(preorderr, inorderr));
        return node; 
    }
};

js

var buildTree = function(preorder, inorder) {
    if (!preorder.length) return null;
    var pos = inorder.indexOf(preorder[0]);
    var node = new TreeNode(preorder[0]);
    node.left = buildTree(preorder.slice(1, pos + 1), inorder.slice(0, pos));
    node.right = buildTree(preorder.slice(pos + 1), inorder.slice(pos + 1));
    return node;
};