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<val)
{
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<val)
{
p->rchild=temp;
}
else
{
p->lchild=temp;
}
}
void?inordertraverse(node*&root)//中序遍歷二叉樹
{
if(root)
{
inordertraverse(root->lchild);
cout<<root->data<<"?";
inordertraverse(root->rchild);
}
}
void?destroy(node?*&root)//摧毀樹,釋放內存
{
if(root)
{
destroy(root->lchild);
destroy(root->rchild);
//cout<<"刪除節點:"<<root<<"\n";
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);
}
測試結果:
如有疑問,可以追問~