• 剑指OFFER----面试题07. 重建二叉树


    链接:https://leetcode-cn.com/problems/zhong-jian-er-cha-shu-lcof/

     

    思路:

      使用map存储中序遍历各节点对应的下标,整个算法使用深搜思想,主要是确定各边界。k 为根结点对应的下标。

      dfs左子树:前序:(pl + 1, pl + k - il) 中序(il , k - 1)

      dfs右子树:前序:(pl + k - il + 1,  pr)  中序(k + 1, ir) 

       

    代码:

    /**
     * Definition for a binary tree node.
     * struct TreeNode {
     *     int val;
     *     TreeNode *left;
     *     TreeNode *right;
     *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
     * };
     */
    class Solution {
    public:
        unordered_map<int, int> pos;
        vector<int> _preorder, _inorder;

        TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
            _preorder = preorder;
            _inorder = inorder;
            int n = preorder.size();
            for (int i = 0; i < n; ++i) pos[inorder[i]] = i;
            return dfs(0, n - 1, 0, n - 1);
        }

        TreeNode* dfs(int pl, int pr, int il, int ir) {
            if (pl > pr) return NULL;
            int k = pos[_preorder[pl]];
            auto left = dfs(pl + 1, pl + k - il, il , k - 1);
            auto right = dfs(pl + k - il + 1, pr , k + 1, ir);
            TreeNode* root = new TreeNode(_preorder[pl]);
            root->left = left, root->right = right;
            return root;
        }
    };
  • 相关阅读:
    七、基础数据类型补充
    JavaScript DOM 鼠标拖拽
    JavaScript JSON 与 AJAX
    JavaScript DOM 事件模型
    JavaScript DOM 样式操作
    JavaScript DOM 常用尺寸
    JavaScript 日期与计时器
    JavaScript DOM 基础
    JavaScript 数组
    JavaScript 对象拷贝
  • 原文地址:https://www.cnblogs.com/clown9804/p/12317167.html
Copyright © 2020-2023  润新知