65,211
社区成员
发帖
与我相关
我的任务
分享#include <iostream>
using namespace std;
typedef struct Node
{
int key;
Node *patent;
Node *left;
Node *right;
}Node,Tree;
//void InitTree(Tree *t) //这个init把问题搞复杂了
//{
// t->key=NULL;
// t->patent=NULL;
// t->left=NULL;
// t->right=NULL;
//}
void InsertNode(Tree **t,int key) //改成了传指针的指针,虽然看上去很怪
{
Node *x,*y;
Node *p=new Node;
p->key=key;
p->left=NULL;
p->right=NULL;
p->patent=NULL;
x=*t;
y=NULL;
while(x) //如果有上面那个init的话,叶子和新的根的判断就不一样了,要while(x && x->key)
{
y=x;
if(x->key>p->key) x=x->left;
else x=x->right;
}
p->patent=y;
if(y==NULL) //原先的话新的根被附到参数传值产生的局部变量t上面了,所以等于没改根节点
*t=p; //按原先的应该是t->key=key,这样刚分配的p又要马上释放掉
else{
if(p->key <y->key) y->left=p;
else y->right=p;
}
}
void InOrder(Tree *t)
{
if(t)
{
InOrder(t->left);
cout <<t->key <<" ";
InOrder(t->right);
}
}
int main()
{
Tree *t(NULL);
// InitTree(t);
InsertNode(&t,12);
InsertNode(&t,6);
InsertNode(&t,15);
InsertNode(&t,18);
InsertNode(&t,2);
InOrder(t); //内存管理没加
system("PAUSE");
return 0;
}
#include <iostream>
using namespace std;
typedef struct Node
{
int key;
Node *patent;
Node *left;
Node *right;
}Node,Tree;
void InitTree(Tree *t)
{
t->key=NULL;
t->patent=NULL;
t->left=NULL;
t->right=NULL;
}
void InsertNode(Tree *t,int key)
{
Node *x,*y;
Node *p=new Node;
p->key=key;
p->left=NULL;
p->right=NULL;
p->patent=NULL;
x=t;
y=NULL;
while(x->key!=NULL)
{
if(x->key>p->key ) {
if(x->left != NULL)
x=x->left;
else {
y=x;
break;
}
}
else {
if(x->right != NULL)
x=x->right;
else {
y=x;
break;
}
}
}
p->patent=y;
if(y==NULL)
*t=*p;
else
if(p->key < y->key)
y->left=p;
else
y->right=p;
}
void InOrder(Tree *t)
{
if(t!=NULL)
{
InOrder(t->left);
cout <<t->key <<" ";
InOrder(t->right);
}
}
void main()
{
Tree *t=new Tree;
InitTree(t);
InsertNode(t,12);
InsertNode(t,6);
InsertNode(t,15);
InsertNode(t,18);
InsertNode(t,2);
}