#include<iostream.h>
struct Node{
int num;
Node *next;
Node *LChild;
Node *RChild;
};
void Print(Node *a)
{
Node *p=a->next;
while(p!=NULL)
{
cout<<p->num<<endl;
p=p->next;
}
}
Node *Init()
{
int n=0;
Node * p1,*p2,*head;
//Node *p1,p2,head和这个声明不同
head=NULL;
p1=new Node;
p2=new Node;
head=new Node;
head->next=p2;
head->LChild=NULL;
head->RChild=NULL;
cout<<"input a num"<<endl;
cin>>p2->num;
while(1)
{
cout<<"input a num"<<endl;
cin>>p1->num;
if(p1->num==0)
{
p2->next=NULL;
break;
}
p1->next=NULL;
// 系统保证指向空指针的地方不指向任何函数或变量
p2->next=p1;
p2=p1;
p1=new Node;
p1->LChild=NULL;
p1->RChild=NULL;
}
//p2=NULL并没有作用,是因为改变的是p2指针的值,而p2指针指向的地方的值没变
// p2=NULL;
cout<<"after"<<endl;
return head;
}
void Insert(Node *a,Node *Temp)
{
cout<<"Temp->num"<<endl;
cout<<Temp->num<<endl;
Temp->next=a->next;
a->next=Temp;
}
void Delete(Node *a,int Temp)
{
int b=Temp;
int n=0;
Node *p=a;
Node *p1=p->next;
while(p1!=NULL)
{
if(p1->num==b)
{
p->next=p1->next;
n=1;
delete p1;
break;
}
p=p1;
p1=p1->next;
}
}
Node *MAX(Node *p1,Node *p2)
{
return p1->num>p2->num?p1:p2;
}
Node *Creat(Node *a)
{
Node *p1,*p2;
p1=new Node;
p2=new Node;
Node *TP;
TP=new Node;
Node *NewTP;
NewTP=new Node;
int count=0;
Node *pp=a->next;
while(pp!=NULL)
{
count++;
pp=pp->next;
}
cout<<"共有"<<count<<"个节点"<<endl;
if(count==1)
{
Node *ReTurn=new Node;
cout<<"a->next->num"<<a->next->num<<endl;
ReTurn=a;
return ReTurn;
}
if(count==2)
{
p1=a->next;
cout<<p1->num<<endl;
p2=a->next->next;
cout<<p2->num<<endl;
NewTP=new Node;
NewTP->num=p1->num+p2->num;
cout<<NewTP->num<<endl;
NewTP->LChild=p1;
NewTP->RChild=p2;
Delete(a,p1->num);
Print(a);
Delete(a,p2->num);
Print(a);
Insert(a,NewTP);
Print(a);
Creat(a);
}
if(count>=3)
{
p1=a->next;
cout<<"p1=a->next->num"<<p1->num<<endl;
p2=a->next->next;
cout<<"p1=a->next->->num"<<p2->num<<endl;
TP=a->next->next->next;
cout<<"tp=a->next->->num"<<TP->num<<endl;
int n=0;
while(TP!=NULL)
{
if(TP->num<MAX(p1,p2)->num)
{
if(MAX(p1,p2)==p1)
{
cout<<"MAX(p1,p2)==p1"<<endl;
p1=TP;
cout<<"p1->num="<<p1->num<<endl;
TP=TP->next;
n++;
continue;
}
if(MAX(p1,p2)==p2)
{
cout<<"MAX(p1,p2)==p2"<<endl;
p2=TP;
cout<<"p2->num"<<p2->num<<endl;
TP=TP->next;
n++;
continue;
}
}
TP=TP->next;
n++;
}
cout<<"out"<<endl;
NewTP->num=p1->num+p2->num;
NewTP->LChild=p1;
NewTP->RChild=p2;
Delete(a,p1->num);
Delete(a,p2->num);
Insert(a,NewTP);
cout<<"out11"<<endl;
Creat(a);
}
}
void main()
{
Node *a;
Node *b;
//
a=new Node;
//不加a=new Node; 直接 cout<<a->num<<endl; 就会出错,因为还没初始化
a=Init();
cout<<endl;
cout<<endl;
cout<<endl;
Print(a);
cout<<endl;
cout<<endl;
cout<<endl;
b=Creat(a);
cout<<b->next->num<<endl;
}
C++实现最优二叉树(修改版)
最新推荐文章于 2022-09-17 18:14:16 发布