树的孩子兄弟表示法.docx
- 文档编号:11183432
- 上传时间:2023-05-29
- 格式:DOCX
- 页数:8
- 大小:15.21KB
树的孩子兄弟表示法.docx
《树的孩子兄弟表示法.docx》由会员分享,可在线阅读,更多相关《树的孩子兄弟表示法.docx(8页珍藏版)》请在冰点文库上搜索。
树的孩子兄弟表示法
树的孩子兄弟表示法
#include
#defineMAX30//树节点的最大数
usingnamespacestd;
template
classnode
{
public:
node()
{
child=nextsibling=NULL;
}
Tele;//节点值
node*child,*nextsibling;//左儿子右兄弟
};
template
classMytree
{
public:
Mytree()
{
tree=NULL;
}
~Mytree()
{
deletetree;
}
voidCreatTree(node
TGetParent(node
TGetLeftChild(node
TGetRightsibling(node
TGetRoot(node
node
node
voidDisplay(node
private:
voidpreTraverseTree(node
voidInTraverseTree(node
voidPostTraverseTree(node
node
};
template
voidMytree
:
CreatTree(node
{
//以tree为根节点构建
if((*tree)!
=NULL)
{
cout<<"输入节点"<<(*tree)->ele<<"的左儿子右兄弟(没有的话输入#):
";
node
node
cin>>a->ele>>b->ele;
if(a->ele!
='#')(*tree)->child=a;//有左儿子
else(*tree)->child=NULL;
if(b->ele!
='#')(*tree)->nextsibling=b;//有有兄弟
else(*tree)->nextsibling=NULL;
CreatTree(&(*tree)->child);//递归构造树
CreatTree(&(*tree)->nextsibling);
}
}
template
TMytree
:
GetParent(node
{
node
if(p)returnp->ele;
elsereturnNULL;
}
template
TMytree
:
GetRoot(node
{
returntree->ele;
}
template
TMytree
:
GetLeftChild(node
{
node
if(p&&p->child)returnp->child->ele;
elsereturnNULL;
}
template
TMytree
:
GetRightsibling(node
{
node
if(p&&p->nextsibling)returnp->nextsibling->ele;
elsereturnNULL;
}
template
voidMytree
:
Display(node
{
cout<<"先序递归遍历:
";
preTraverseTree(tree);
cout< cout<<"中序递归遍历: "; InTraverseTree(tree); cout< cout<<"后序递归遍历: "; PostTraverseTree(tree); cout< } template voidMytree : preTraverseTree(node { if(tree) { cout< preTraverseTree(tree->child); preTraverseTree(tree->nextsibling); } } template voidMytree : InTraverseTree(node { if(tree) { InTraverseTree(tree->child); cout< InTraverseTree(tree->nextsibling); } } template voidMytree : PostTraverseTree(node { if(tree) { PostTraverseTree(tree->nextsibling); PostTraverseTree(tree->child); cout< } } template node : RetPoint(Tt,node { if(tree) { if(tree->ele==t)returntree; elseif(RetPoint(t,tree->child)! =NULL) { returnRetPoint(t,tree->child); } elseif(RetPoint(t,tree->nextsibling)! =NULL) { returnRetPoint(t,tree->nextsibling); } elsereturnNULL; } elsereturnNULL; } template node : RetParentPoint(Tt,node { if(tree&&tree->child) { if(tree->ele==t)returntree; elseif(RetParentPoint(t,tree->child)) returnRetParentPoint(t,tree->child); elseif(RetParentPoint(t,tree->nextsibling)) returnRetParentPoint(t,tree->nextsibling); elsereturnNULL; } } intmain() { Mytree node cout<<"输入根节点: "; cin>>root->ele; mytree.CreatTree(&root); cout<<"树的根: "< cout<<"输入t: "; chart; cin>>t; cout<<"t的左儿子"< cout<<"t的右兄弟"< cout<<"t的父节点: "< cout<<"树的左儿子右兄弟表示法的三种遍历: "< mytree.Display(root); return0; } /* 输入根节点: a 输入节点a的左儿子右兄弟(没有的话输入#): bc 输入节点b的左儿子右兄弟(没有的话输入#): de 输入节点d的左儿子右兄弟(没有的话输入#): ## 输入节点e的左儿子右兄弟(没有的话输入#): fg 输入节点f的左儿子右兄弟(没有的话输入#): ## 输入节点g的左儿子右兄弟(没有的话输入#): ## 输入节点c的左儿子右兄弟(没有的话输入#): h# 输入节点h的左儿子右兄弟(没有的话输入#): ## 树的根: a 输入t: c t的左儿子h t的右兄弟 */
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 孩子 兄弟 表示