递归创建二叉树的程序是怎么执行的如下
template<classDataType>BiTree::BiTree(){root=Creat(root);}template<classDataType>BiNo...
template <class DataType>
BiTree :: BiTree( )
{
root = Creat(root);
}
template <class DataType>
BiNode<DataType> *BiTree<DataType>::Creat(BiNode<DataType> *bt)
{
cin >> ch; //输入结点的数据信息,假设为字符
if (ch == '# ') bt = NULL; //建立一棵空树
else {
bt = new BiNode; bt->data= ch; //生成一个结点,数据域为ch
bt->lchild = Creat(bt->lchild); //递归建立左子树
bt->rchild = Creat(bt->rchild); //递归建立右子树
}
return bt;
}
这段部分代码是不是输入一次#递归调用就结束了?还有我怎么左看右看都是一直递归调用左子树啊,什么情况下才是递归调用右子树啊?我下面给一张二叉树的图,麻烦大神帮我从一开始构建二叉树到结束的过程(包括怎么递归等过程)详细的和我说一下,感激不尽啊。 展开
BiTree :: BiTree( )
{
root = Creat(root);
}
template <class DataType>
BiNode<DataType> *BiTree<DataType>::Creat(BiNode<DataType> *bt)
{
cin >> ch; //输入结点的数据信息,假设为字符
if (ch == '# ') bt = NULL; //建立一棵空树
else {
bt = new BiNode; bt->data= ch; //生成一个结点,数据域为ch
bt->lchild = Creat(bt->lchild); //递归建立左子树
bt->rchild = Creat(bt->rchild); //递归建立右子树
}
return bt;
}
这段部分代码是不是输入一次#递归调用就结束了?还有我怎么左看右看都是一直递归调用左子树啊,什么情况下才是递归调用右子树啊?我下面给一张二叉树的图,麻烦大神帮我从一开始构建二叉树到结束的过程(包括怎么递归等过程)详细的和我说一下,感激不尽啊。 展开
2个回答
2014-12-18
展开全部
bt->rchild = Creat(bt->rchild); //递归建立右子树
这就是创建右子树。
左右是相对的,根据你的根节点而定,a是根,那么bd就是左子树,b是根,d就是右子树,
只是子树具备父树的关系才用递归而已。
至于过程嘛,你只需知道父树的创建顺序就Ok了,子树同理,否则就不是树,这里是前序创建,中左右。
创建根节点
创建整个左子树
创建整个右子树
三步完成树就完成了,至于左子树怎么创建,上面已经说的很明白了。
这就是创建右子树。
左右是相对的,根据你的根节点而定,a是根,那么bd就是左子树,b是根,d就是右子树,
只是子树具备父树的关系才用递归而已。
至于过程嘛,你只需知道父树的创建顺序就Ok了,子树同理,否则就不是树,这里是前序创建,中左右。
创建根节点
创建整个左子树
创建整个右子树
三步完成树就完成了,至于左子树怎么创建,上面已经说的很明白了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询