剑指offer(第二版)面试题7. 重建二叉树,leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal

欢迎访问我的剑指offer(第二版)题解目录
对应的leetcode题目可点击leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal

题目描述

Given preorder and inorder traversal of a tree, construct the binary tree.

算法设计

先根遍历是按照“中左右”顺序,中根遍历是按照“左中右”顺序。可以根据先根序列确定根结点,根据中根序列确定左子树和右子树,递归处理左右子树即可。

C++代码

/**
 * 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:
    TreeNode* f(vector<int>& pre, vector<int>& in, int root, int left, int right) {
        if (left > right)
            return nullptr;
        int i = find(in.begin(), in.end(), pre[root]) - in.begin();
        auto r = new TreeNode(pre[root]);
        r->left = f(pre, in, root + 1, left, i - 1);
        r->right = f(pre, in, root + 1 + i - left, i + 1, right);
        return r;
    }
    TreeNode* buildTree(vector<int>& preorder, vector<int>& inorder) {
        return f(preorder, inorder, 0, 0, inorder.size() - 1);
    }
};
发布了528 篇原创文章 · 获赞 1015 · 访问量 37万+

猜你喜欢

转载自blog.csdn.net/richenyunqi/article/details/103388493