仅仅根据前序遍历是不能确实二叉树的 但是用’#‘来表示空 即可确定二叉树
上图用前序遍历和’#’ 表示的唯一结果为: A B D # # E # H # # C F # # G
typedef struct Result
{
Node *root;
int used;
}Result;
Result CreatTree(char pre[], int size)
{
if (size == 0)
{
Result r = { NULL, 0 };
return r;
}
char rootvalue = pre[0];
if (rootvalue == '#')
{
Result r = { NULL, 1 };
return r;
}
Node*root = (Node*)malloc(sizeof(Node));
root->value = rootvalue;
Result leftresult = CreatTree(pre + 1, size - 1);
root->left = leftresult.root;
Result rightresult = CreatTree(pre + 1+leftresult.used,
size - 1-leftresult.used);
root->right = rightresult.root;
Result r = { root, 1 + leftresult.used + rightresult.used };
return r;
}
关系:建立 根 建立左子树 建立右子树
终止条件:size == 0 和’#’