用二叉树实现存储信息.docx
- 文档编号:25612460
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:12
- 大小:34.77KB
用二叉树实现存储信息.docx
《用二叉树实现存储信息.docx》由会员分享,可在线阅读,更多相关《用二叉树实现存储信息.docx(12页珍藏版)》请在冰豆网上搜索。
用二叉树实现存储信息
用二叉树实现存储信息用二叉树实现存储信息.txt老子忽悠孩子叫教育,孩子忽悠老子叫欺骗,互相忽悠叫代沟。
▲男人这花花世界,我要用什么颜色来吸引你。
#inelude
#inelude
usingnamespaeestd;
typedefstruct_student
{
intid;
ehar[20]Name;
IntAge;
intMath;//(数学成绩)
};//学生结构体
structtreeitem
{
structtreeitem*lchild;
structtreeitem*rchild;
struct_studentmystudent;
};//二叉树结构体
classStudent
{
public:
Student(void);
~Student(void);
voidCreate(structtreeitem*Tnode);//
创建
voidFind(structtreeitem*tree,inti);//
查看节点是否存在
voidSearch(Student&tree);〃查询节点
voidChange(structtreeitem*Tnode,int
i);//修改
voidDeleteNode(structtreeitem*tree,inti);//删除
Student*node;//根节点
private:
booltj;
inti_id,i_age,i_math;
charc_ch;
};
.cpp===
Student:
:
Student(void)
{
tj=false;
}
Student:
:
~Student(void)
{
}
voidStudent:
:
Create(structtreeitem
*Tnode)//创建1
{
cin>>i」d,c_ch,i_age,i_math;
if(id!
=null&&ch!
="&&age!
=null&&math!
=n
ull)
{
struct_student*Ts;
Ts->id=i」d;
Ts->Name=c_ch;
Ts->Age=i_age;
Ts->Math=i_math;
Tnode=(structtreeitem*)malloc(sizeof(structtreeitem));
Tnode->mystudent=Ts;
Create(Tnode->lchild);//生成左子树
Create(Tnode->rchild);//生成右子树
cout«"CreateComplated!
"«endl;
}
else
{
Tnode=NULL;cout "< } voidBinSTree: : Find(structtreeitem *tree,inti)//查找 { if(tree! =NULL) { if(tree->id==i) { tj=true; return; } if(tree->lchild匸NULL) { f(tree->lchild->id==i) { tj=true; return; } }if(tree->rchild! =NULL) { f(tree->rchild->id==i) { tj=true; return; Find(tree->lchild,i); Find(tree->rchild,i); } voidStudent: : Search(Student&tree) { if(tree! NULL) { if(tree->lchild->lchild==NULL&&tree->lchild->rchild==NULL) { returntree->lchild; } else f(tree->rchild->lchild==NULL&&tree->rchid->rchild==NULL) { returntree->rchild;returnSearch(tree->lchild);returnSearch(tree->rchild); } treeitem voidStudent: : Change(struct *Tnode,inti) { Find(Tnode,i); if(! tj) { coutvv"无此节点! "< } else { cin>>i_age,i_math,c_ch; Tnode->mystudent.Age=i_age; Tnode->mystudent.Name=c_ch; Tnode->mystudent.Math=i_math; } voidStudent: : DeleteNode(struct *tree,inti) { Find(tree,i); if(! tj) { cout«"无 点! "< return; } if(tree! =NULL) { if(node->id==i)// 的正好是根节点 { f(node->lchild==NULL&&node->rchild NULL)//只有一个根节点的情况 { treeitem 要删除 deletenode; node=NULL; coutvv"已删除节点,当前树为空"< return; } else if(node->lchild! =NULL&&node->rchild== NULL)//有左孩子没右孩子 { treeitem*p=node; new treeitem*d treeitem(Search(node)->id); d->lchild=tree->lchild; d->rchild=NULL; node =d; deletep; cout«"ID值为"vvivv"的节点已"< } else if(node->rchild! =NULL&&node->lchild: NULL)//有右孩子没左孩子 { treeitem*p=node; treeitem*d treeitem(Search(node)->contents); d->lchild=NULL; d->rchild=tree->rchild; 被删除 new node= d; 点已被删除 new deletep; cout«"ID值为"vvivv"的节 "vvendl; } else //有左、右孩子 { treeitem*p=node; treeitem*d treeitem(Search(node)->id); d->lchild=tree->lchild; d->child=tree->rchild; node =d; cout«"ID值为"vvivv"的节点已被删除"< } } if(tree->lchild! =NULL)〃 左孩子,且正是要查找的 { if(tree->lchild->id==i)// 子是要查找的 { if(tree->lchild->lchild tree->lchild->rchild! =NULL) { 不是根节点,树还有 若根节点的左孩 ==NULL&& treeitem*p=tree->lchild; cout«"ID值为"vvivv"的节点已被删除 "< }else NULL&& f(tree->lchild->lchildtree->lchild->rchild==NULL)deletetree->lchild; tree->lchild=NULL; cout«"ID值为"vvivv"的节点已被删除 "< } else f(tree->lchild->lchild! =NULL&& tree->lchild->rchild==NULL) { treeitem*p=tree->lchild; tree->lchild=tree->lchild->lchild; deletep; cout«"ID值为"vvivv"的节点已被删除 "< } else if(tree->lchild->lchild! =NULL&& tree->lchild->rchild! =NULL) { treeitem*p=tree->lchild; treeitem*d=new treeitem(Search(node)->id); d->left=tree->lchildt->lchild; tree->lchild=d; deletep; return; f(tree->rchild->id==i) { NULL&& f(tree->rchild->lchildtree->rchild->rchild==NULL) { tree->rchild=NULL; cout«"ID值为"vvivv"的节点已被删除 "vvendl; } else f(tree->rchild->lchild! =NULL&& tree->rchild->rchild==NULL) { treeitem*p=tree->rchild; tree->rchild=tree->rchild->lchild; deletep; cout<<"ID值为"vvivv"的节点已被删除'< } else if(tree->rchild->child==NULL&& tree->rchild->rchild! =NULL) treeitem*p=tree->rchild; tree->rchild=tree->rchild->rchild; deletep; cout«"ID值为"vvivv"的节点已被删除 "< } else if(tree->rchild->lchildtree->rchild->rchild! =NULL) { treeitem*p=tree->rchild; treeitem(Search(node)->id); d->lchild=tree->rchild->lchild; d->rchild=tree->rchild->rchild; tree->rchild=d; deletep; } return; } 继续根节点的 } DeleteNode(tree->lchild,i);〃 左孩子,进行递归算法。 DeleteNode(tree->rchild,i); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二叉 实现 存储 信息