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

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

题目描述

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

猜你喜欢

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