用C++编程,从键盘输入15个数,把他们存储于二叉树中,使二叉树的中序遍历从小到大有序

2025-04-24 08:19:06
推荐回答(1个)
回答1:

#include
using std::cin;
using std::cout;
using std::endl;
struct node
{
float data;//存储数据
node * lchild;//左孩子
node * rchild;//右孩子
};
void search(node *root,node *&p,float val)//root为树的根,p为插入数据的双亲节点,若果为空,则说明树为空
{
if(!root)
{
p=root;
}
else
{
while(root&&root->data!=val)
{
p=root;
if(root->data {
root=root->rchild;
}
else
{
root=root->lchild;
}
}
if(root)
{
p=root;
}
}

}
void insert(node *&root,float val)//对二叉树root插入数据为val的节点
{
node *p=nullptr;
search(root,p,val);
node *temp=new node;
temp->data=val;
temp->lchild=temp->rchild=nullptr;
if(!p)
{
root=temp;
}
else if(p->data {
p->rchild=temp;
}
else
{
p->lchild=temp;
}
}
void inordertraverse(node*&root)//中序遍历二叉树
{
if(root)
{
inordertraverse(root->lchild);
cout<data<<" ";
inordertraverse(root->rchild);
}
}
void destroy(node *&root)//摧毁树,释放内存
{
if(root)
{
destroy(root->lchild);
destroy(root->rchild);
//cout<<"删除节点:"< delete root;
}
}
void main()
{
node* tree=nullptr;
int num=0;
cout<<"输入数据个数:";
cin>>num;
float val=0;
while(num)//创建num个节点的二叉树
{
num--;
cin>>val;
insert(tree,val);
}
cout<<"中序遍历:\n";
inordertraverse(tree);//中序遍历二叉树
destroy(tree);
}

测试结果:



如有疑问,可以追问~