从中序与后序遍历序列构造二叉树

378 阅读1分钟

算法模板

TreeNode* traversal (vector& inorder, vector& postorder) {

// 第一步
if (postorder.size() == 0) return NULL;

// 第二步:后序遍历数组最后一个元素,就是当前的中间节点
int rootValue = postorder[postorder.size() - 1];
TreeNode* root = new TreeNode(rootValue);

// 叶子节点
if (postorder.size() == 1) return root;

// 第三步:找切割点
int delimiterIndex;
for (delimiterIndex = 0; delimiterIndex < inorder.size(); delimiterIndex++) {
    if (inorder[delimiterIndex] == rootValue) break;
}

// 第四步:切割中序数组,得到 中序左数组和中序右数组
// 第五步:切割后序数组,得到 后序左数组和后序右数组

// 第六步
root->left = traversal(中序左数组, 后序左数组);
root->right = traversal(中序右数组, 后序右数组);

return root;

}