typedef int TElemType;
typedef struct BitNode
{
TElemType data;
struct BitNode *lchild, *rchild;
}BitNode, *BitTree;
BitTree CreateBiTree(void)
{
BitTree bt;
TElemType x;
scanf("%d", &x);
if(x == -1)
{
bt = NULL;
}
else
{
bt = (BitTree)malloc(sizeof(BitNode));
bt-> data = x;
bt-> lchild = CreateBiTree();
bt-> rchild = CreateBiTree();
}
return bt;
}
下面是我的分析:
输入1
建立节点A
此时执行节点A的bt-> lchild = CreateBiTree();
输入2
建立节点B
执行节点B的bt-> lchild = CreateBiTree();
输入3
建立C
执行节点C的bt-> lchild = CreateBiTree();
输入-1
f(x == -1)
{
bt = NULL;
}
return bt;
返回空 即节点C完成左子树
节点C的bt-> lchild = CreateBiTree(); 该句执行完毕 返回为空
此时执行节点C的bt-> rchild = CreateBiTree(); 建立右子树
输入-1
返回 节点C完成右子树
此时
bt-> lchild = CreateBiTree(); ↓
bt-> rchild = CreateBiTree(); ↓
} ↓
return bt; ↓
}
返回完整节点C
此时节点C完成 也就是节点B的左子树完成 开始构造节点B的右子树
节点B的bt-> lchild = CreateBiTree(); 完成
执行节点B的bt-> rchild = CreateBiTree();
输入4
构造节点D
输入 -1
返回 完成节点D左子树
输入 -1
返回 完成节点D右子树
此时节点B完成
也就是节点A的左子树完成
开始构造节点A的右子树
如此这般。。。。
A1
B2 E5
C3 D4 F6 G7
空 空 空 空 空 空 空 空