Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal (Medium) (cpp)

本文介绍如何解决LeetCode上的第106题——根据一棵树的中序遍历与后序遍历构造二叉树。文章详细解释了递归构建树的过程,并提供了完整的C++代码实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Leetcode 106. Construct Binary Tree from Inorder and Postorder Traversal (Medium) (cpp)

Tag: Array, Tree, Depth-first Search

Difficulty: Medium


/*

106. Construct Binary Tree from Inorder and Postorder Traversal (Medium)

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

Note:
You may assume that duplicates do not exist in the tree.

*/
/**
 * 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* buildTree(vector<int>& inorder, vector<int>& postorder) {
        return BT(inorder, 0, inorder.size() - 1, postorder, 0, postorder.size() - 1);
    }
    TreeNode* BT(vector<int>& inorder, int il, int ir, vector<int>& postorder, int pl, int pr) {
        if (il > ir) {
            return NULL;
        }
        int val = postorder[pr];
        TreeNode *root = new TreeNode(val);
        int i = il;
        for (; i < ir; i++) {
            if (val == inorder[i]) {
                break;
            }
        }
        root -> left = BT(inorder, il, i - 1, postorder, pl, pl - il + i - 1);
        root -> right = BT(inorder, i + 1, ir, postorder, pl - il + i, pr - 1);
        return root;
    }
};