通常递归终止条件放置在程序的开始,但是在C语言中变量声明和初始化必须放置在函数的开头。在不注意的情况下可能导致一些难以察觉的bug,如下:
TreeNode * buildTree(char *preOrder, char *inorder, int begin, int end)
{
static int index = 0;
int i;
char c; // 这里不能直接初始化 char c = preOrder[index++],因为在递归不进行的时候index不能改变
TreeNode *root;
if (begin > end)
return NULL;
c = preOrder[index++];
for (i = begin; i <= end && inorder[i] != c; ++i)
;
if (i > end) {
printf("No Answer!\n");
exit(0);
}
root = newTreeNode(c);
root->left = buildTree(preOrder, inorder, begin, i - 1);
root->right = buildTree(preOrder, inorder, i + 1, end);
return root;
}