百度空间 | 百度首页 
 
查看文章
 
递归构造二叉树+分析 (温习)
2008-01-03 10:46

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
    空      空 空     空          空     空    空     空


类别:Public | 添加到搜藏 | 浏览() | 评论 (1)
 
最近读者:
 
网友评论:
1
2008-01-03 11:41 | 回复
来你的博客逛逛,祝你的博客越办越火! 有空来我的千心源博客看看,我们一起在新的一年中人气旺! 千心源——全中文生活百科 千心源以原创内容为主,如有转载请注明!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu