首页 > 编程知识 正文

二叉树左右子树,具有3个节点的二叉树有

时间:2023-05-06 07:55:34 阅读:117327 作者:1069

查找具有二叉树的节点的父节点和左右子节点的【问题描述】

首先,利用二叉树的前相搜索生成一棵二叉树,输入x的值,在二叉树中搜索节点值为x的父节点和x的左、右子节点。 请各创建三个二叉树类成员函数。 如果找到x的父节点和左、右子节点,则输出节点的数据值;如果没有父节点和子节点,则输出“NULL”。 二叉树系统的成员函数声明见下面的:

bin treenode * parent (bin treenode * root,T item ); 返回到item的父节点指针

bin treenode * leftchild (bin treenode * root,T item ); 返回到item左边子代的指针

bin treenode * right child (bin treenode * root,T item ); 返回到item右边子代的指针

【输入形式】假设二叉树的节点为字符型,输入“#”表示空节点,输入第2行。 第一行制作二叉树用的字符串。 具体请参照样本输入。 二叉树请参照教材P197页,图5.13,第2行请参照要检索的x值

输出格式为3行,是第1行为x的父节点的数据值、第2行为x的左边的子节点的数据值、第3行为x的右边的子节点的数据值,父节点为空(例如根节点),或者左、右边的子节点为空(例如叶节点)

【样品输入】

ABD##EG###C#F##

B

【样品输出】

a

d

e

【样品说明】

注意特殊情况,如只有一个根节点的二叉树以及二叉树中不存在输入的x值

其他测试数据:

输入:

a###

a

输出:

空值

空值

空值

输入:

ABD##EG###C#F##

f

输出:

C

空值

空值

输入:

ABD##EG###C#F##

C

输出:

a

空值

f

输入:

ABD##EG###C#F##

h

输出:

空值

空值

空值

代码: # includeiostreamusingnamespacestd; templateclasststructbintreenode tdata; BinTreeNodeT* leftchild; BinTreeNodeT* rightchild; BinTreeNode () {leftchild=NULL; right child=空; }bintreenode(tx ) {data=x; leftchild=NULL; right child=空; }; templateclasstclasstree { public : bintreenodet * root; 树(); ~Tree (; voidcreatetree(bintreenodet*t; voiddeletree(bintreenodet*t; bintreenodet * parent (bintreenodet * root,T item ); //item的父节点指针bintreenodet * leftchild (bintreenodet * root,T item ); 返回//item的左子指针bintreenodet * right child (bintreenodet * root,T item ); 返回item右边子代的指针; templateclassttreet 33603360 tree () {root=NULL; } templateclassttreet :3360~tree ({ } templateclasstvoidtreet :3360 create tree (bintreenodet * t ) tx; cin x; if(x=='# ' ) {t=NULL; 返回; }t=newbintreenodet(x; if(t==null )返回; 创建树(t-leftchild; 创建树(t-right child; } templateclasstvoidtreet :3360 deletree (bintreenodet * t ) if ) t==null ) return; Eletree(t-leftchild ); 删除(t-right child ); 删除t; } templateclasstbintreenodet * treet :3360 parent (bintreenodet * root,T item ) {BinTreeNodeT* temp=NULL; if (根==空)返回空值; 根-左!=空(if ) root-leftchild-data==item ) return root; (if ) root-rightchild!=null(if ) root-rightchild-data==item )返回root; } temp=parent (根左方向,item ); if(temp )返回时间; temp=parent (根光周期,item ); if(temp )返回时间; 返回空值; } templateclasstbintreenodet * treet : leftchild (bintreenodet * root,T item ) {BinTreeNodeT* temp; if (根==空)返回空值; if (根数据==item ) return root-leftchild; temp=leftchild (根- leftchild,item ); if(temp )返回时间; temp=leftchild (根光周期,item ); if(temp )返回时间; } templateclasstbintreenodet * treet :3360 right child (bintreenodet * root,T item ) {BinTreeNodeT* temp; if (根==空)返回空值; 根数据==item (if )返回根权限字段; temp=right child (根左转向,item ); if(temp )返回时间; temp=right child (根光child,item ); if(temp )返回时间; }int main () {Treechar temp; temp.createtree(temp.root ); char ch; cin ch; BinTreeNodechar* a、*b、*c; a=temp.Parent(temp.root,ch ); if(a ) cout a-data endl; elsecout 'NULL' endl; b=temp.leftchild(temp.root,ch ); if(b ) cout b-data endl; elsecout 'NULL' endl; c=temp.rightchild(temp.root,ch ); if(c ) cout c-data endl; elsecout 'NULL' endl; TEMP.deletree(TEMP.root ); 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。