在当前的代码中,当 k == -1 时,会直接返回 NULL,导致递归函数结束。为了在遇到不合法的输入时返回上一级,你可以在递归函数中添加一个判断条件,如果 k == -1 则返回上一级。
以下是修改后的代码片段:node* buildtree(char* postorder, char* inorder, int n) { if (n <= 0) return NULL; char tdata = postorder[n - 1]; int k = find_(inorder, n, tdata); if(k == -1) { return NULL; } node* root = new node; root->data = tdata; root->left = buildtree(&postorder[0], &inorder[0], k); if (root->left == NULL) { // 非法输入,返回上一级 delete root; return NULL; } root->right = buildtree(&postorder[k], &inorder[k+1], n - k - 1); if (root->right == NULL) { // 非法输入,返回上一级 delete root->left; delete root; return NULL; } return root;}
请注意,当发现左子树或右子树为空时,我们将删除已创建的节点并返回 NULL,以确保整个树的结构正确。
希望这可以解决你的问题。如果还有其他疑问,请随时提问。 |