回 帖 发 新 帖 刷新版面

主题:[讨论]中序法构造二叉树

请教各位,如何用修改中序遍历二叉树法来构造二叉树?如输入:((a+b)*(a-b)),建立下图的二叉树:
[img]http://116.img.pp.sohu.com/images/blog/2007/8/14/22/13/114fe9d4a83.jpg[/img]


中序遍历算法为:
void Inorder(tree *t, int first)
{
    tree *current;
    if (first)
{
    current=head;        //初始时current应指向当前二叉树的根
    first=0;
}
else current=t;
if (current != Null)
{
    Inorder(current->lchild,first);        //遍历左子树
    cout<<current->data;        //访问根
    Inorder(current->rchild,first);  //遍历右子树
}
}
我们通常是修改先序遍历法来生成二叉树.现在我想用中序法(如上所示),使得可以将一个算术式子转化成为一个二叉树。我想修改上述的中序法,可是遇到很多困难,如不知道如何处理叶子,如何利用递归(我估计用递归会无法实现,因为它不像先序法)。现在几乎毫无头绪,请教大家,谢谢!

回复列表 (共3个回复)

沙发

不考虑算符优先的话,递归就可以做出来

板凳

不需要算符优先。递归可以吗?不怕丢失一些点吗?

3 楼

tree * Inorder(tree *t, int first)//返回值要注意一下!


 current->lchild=Inorder(current->lchild,first);        //遍历左子树
    cout<<current->data;        //访问根
    current->rchild=Inorder(current->rchild,first);  //遍历右子树
用这种形式就可以了。

不过我觉得你写的程序都很多不对。
比如:tree *current;这个current是tree这个类里面的一个成员啊,怎么可以又在外面这样定义呢?
还有你那个参数first用来干吗,都好像改变过值。
还有你是要输入字符串,然后输出二叉树,可是你的参数里面怎么没有一个字符串的啊?

我来回复

您尚未登录,请登录后再回复。点此登录或注册