回 帖 发 新 帖 刷新版面

主题:二叉树的创建及遍历问题,试了很久,高手帮帮手

#include<stdio.h>
#include<math.h>
#include<iostream.h>
#include<malloc.h>
typedef struct BinTree
{
    int data;
    struct BinTree*left,*right;

}tree;
tree* insert(tree*root,int x)//建二叉树
{
    tree*p;
    if(root==NULL)//若为根结点
    {
        p=(tree*)malloc(sizeof(tree));
        p->data=x;
        p->left=NULL;
        p->right=NULL;
        return(p);
    }
    else if(x<root->data)
        root->left=insert(root->left,x);
    else
        root->right=insert(root->right,x);
    return root;
}
void middle(tree*root)//中序遍历
{
    middle(root->left);
    cout<<root->data;
    middle(root->right);
}
void main()
{
    int x;
    tree* root=NULL;
    cin>>x;
    while(x!=-1)//-1时结束
    {
        root=insert(root,x);
        cin>>x;
    }
    middle(root);
}
运行时出错,为什么?[em10]

回复列表 (共3个回复)

沙发


我运行你的代码的时候编译没有任何问题,但是一输入-1的时候,就会弹出出错的对话框,
  我发现你的middle函数有问题。我修改了一个,就可以正确输出了。
  void middle(tree*root)//中序遍历
{   if(root!=NULL){
    middle(root->left);
    cout<<root->data<<" ";
    middle(root->right);
}
}
  你参考一下。其他遍历也一样。

板凳

果然如此!谢谢拉![em5][em2]

3 楼

void middle(tree*root)//中序遍历
{
    middle(root->left);
    cout<<root->data;
    middle(root->right);
}
少了判断语句吧

我来回复

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