Tree *Create() {
int i, j;
Tree *t, *p, *s[50];
// 以 0 为结束标记;if (i == 0)若输入 0 就结束输入数据循环;
while (1) {
cin >> i;
if (i == 0)
break;
else {
p = new Tree();
// 新建一个空间使左右结点都置为空;输入其新结点的数据;新结点 p 给指针变量s[i]数组;
p->lchild = p->rchild = NULL;
cin >> p->data;
s[i] = p;
if (i == 1)
// 若 i == 1 说明为根结点;t为返回的根指针;所以 t 指向 p;
t = p;
else {
// 若 i 不为根结点序号 j = i/2;s[j]为其双亲结点的序号(二叉树的性质里有介绍);
j = i/2;
// 若 i%2 == 0 说明当前结点为 i 的序号为双亲结点的左结点;所以双亲结点s[j] 指向的左结点指向 p;;要不就为右结点;
if (i%2 == 0)
s[j]->lchild = p;
else
s[j]->rchild = p;
}
}
}
// 返回根指针;
return t;
}
int main() {
Tree *t;
t = Create();
return 0;
}
操作内容是先输入序号数字1,在输入字符串,在输入数字2, 在输入字符串,在输入数字3,在输入字符串,直到输入数字 0 为结束标记,然后通过构造函数用后根遍历的方法输出结果;