读书人

二叉搜索树的有关问题总是运行异常

发布时间: 2013-08-10 21:14:06 作者: rapoo

二叉搜索树的问题,总是运行错误

struct Node
{
int key;
Node *p;
Node *left;
Node *right;
};

class BinarySearchTree
{
private:
Node *root;
Node *temp;
public:
Node* Root();
BinarySearchTree();
~BinarySearchTree();
void InorderWalkTree(Node *T);
void PreorderWalkTree(Node *T);
void PostorederWalkTree(Node *T);
Node* Search(int k);
Node* Minmum(Node *x);
Node* Maxmum(Node *x);
Node* Predecessor(Node *x);
Node* Successor(Node *x);
void Insert(int x);
void Transplant(Node *u,Node *v);
void Delete(int x);
};


插入操作:
void BinarySearchTree::Insert(int value)
{
Node *y,*x;
y=NULL;
x=root;
while(x!=NULL)
{
y=x;
if(x->key>value)
x=x->left;
if(x->key<value)
x=x->right;
}
if(y=NULL)
{
root=new Node;
root->key=value;
}
else if(x==y->left)
{
y->left=new Node;
y->left->p=y;
y->left->key=value;
}
else
{
y->right=new Node;
y->right->p=y;
y->right->key=value;
}
}

主函数:
int main()
{
BinarySearchTree T;
T.Insert(5);
//T.Insert(6);
//T.Insert(7);
//T.Insert(1);
//T.Insert(4);
//T.Insert(3);

return 0;
}

1、编译可以通过,但是运行不了,应该是指针的问题吧,当然也可能是别的,帮我看下,谢谢了;
2、另外Node也可以用一个类来实现,请问用结构好还是用类好。
[解决办法]
root 初始化了吗?
[解决办法]
root应该在构造函数中置空,如下:
BinarySearchTree::BinarySearchTree():root(NULL){}
或者
BinarySearchTree::BinarySearchTree(){root = NULL;}


还有就是下面的错误,在插入函数中
if(y=NULL) //少写等号了吧 建议把NULL写前面,这样少写等号会报错:if(NULL == y)
{
root=new Node;
root->key=value;
}


另外在new Node之后,请把该new Node的左右子树都置空,否则可能会有其它问题


[解决办法]
实际工程中不要自己写了,STL中有成熟的二叉树

读书人网 >C++

热点推荐