以二叉链为存储结构,在二叉树中查找x结点,写一算法,打印值为x的结点的所有祖先的算法。

辛家璇 2019-12-21 18:30:00

推荐回答

#include#include#include#defineNUM_NODE12typedefstructBiTree{intdata;BiTree*lchild;BiTree*rchild;}BiTree;BiTree*CreateTreeintn{BiTree*t;ifnNUM_NODEreturnNULL;if!t=BiTree*mallocsizeofBiTreereturnNULL;t->data=n;printf"%d",t->data;t->lchild=CreateTree2*n;t->rchild=CreateTree2*n+1;returnt;}voidFreeTreeBiTree*t{ift{ift->lchildFreeTreet->lchild;ift->rchildFreeTreet->rchild;printf"%d",t->data;freet;}}typedefstructNodePos{BiTree*pos;intDepth;}NodePos;//前序查找,如果返回0,说明树中没有这个数depth参数为根结点的层数,由用户定intPreSeekBiTree*T,intdata,intdepth,NodePos*p{intret=0;ifT->data==data{p->Depth=depth;p->pos=T;ret=1;}else{ifT->lchildret+=PreSeekT->lchild,data,depth+1,p;ifT->rchildret+=PreSeekT->rchild,data,depth+1,p;}returnret;}intmain{BiTree*root;printf"CreateTree";root=CreateTree1;printf"Inputwhatyoulookingfor:";inta;NodePospos;scanf"%d",&a;ifPreSeekroot,a,1,&posprintf"结点地址为:%8X,深度:%d",pos.pos,pos.Depth;elseprintf"Nodenotfound";printf"FreeTree";FreeTreeroot;return0;。
边可斌2019-12-21 18:57:43

提示您:回答为网友贡献,仅供参考。

其他回答

  • 遍历二叉树,求最大值。define UNVAILD_VALUE-32768intgetMaxValueTreeNode*root{ifroot==NULLreturnUNVAILD_VALUE;else{intmaxValue= maxgetMaxValueroot->left, getMaxValueroot->right;return root->value>  maxValue ?root->value: maxValue;}。
    连伟祥2019-12-21 18:41:40

相关问答

,int&count{//递归方法,ifT{if!T->lchild&&!T->rchildcount++;CountLeafT->lchild,count;//统计左子树中叶子结点个数CountLeafT->rchild,count;//统计右子树中叶子结点个数}}----------非递归,就是采用前序/中序/后序遍历所有节点,并统计。下面就给你提供分别用三个函数的统计方法PS:因为计数器定义为全局,所以三个函数不能同时使用,使用其中一个就能统计你要的节点数。include"stdlib.h"#defineMAXNODE20#defineISIZE8#defineNSIZE07#defineNSIZE18#defineNSIZE215//SHOWCHAR=1显示字符SHOWCHAR=0显示数字#defineSHOWCHAR1//二叉树结构体structBTNode{intdata;BTNode*rchild;BTNode*lchild;};//非递归遍堆栈structABTStack{BTNode*ptree;ABTStack*link;};staticpCounter=0;//计数器,记录节点个数/*前序遍历函数pre_Order_Access参数描述:BTNode*head:根节点指针*/voidpre_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;pt=head;top=NULL;printf"\n二叉树的前序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/pt=pt->rchild;/*遍历节点右子树*/}}}/*中序遍历函数mid_Order_Access参数描述:BTNode*head:根节点指针*/voidmid_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"\n二叉树的中序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/ifSHOWCHARprintf"%c",pt->data;/*访问根节点*/elseprintf"%d",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}}/*后序遍历函数last_Order_Access参数描述:BTNode*head:根节点指针*/voidlast_Order_AccessBTNode*head{BTNode*pt;ABTStack*ps,*top;intcounter=1;pt=head;top=NULL;printf"\n二叉树的后序遍历结果:\t";whilept!=NULL||top!=NULL/*未遍历完,或堆栈非空*/{whilept!=NULL{ps=ABTStack*mallocsizeofABTStack;/*根节点进栈*/ps->ptree=pt;ps->link=top;top=ps;pt=pt->lchild;/*遍历节点右子树,经过的节点依次进栈*/pCounter++;}iftop!=NULL{pt=top->ptree;/*栈顶节点出栈*/ps=top;top=top->link;freeps;/*释放栈顶节点空间*/printf"%c",pt->data;/*访问根节点*/pt=pt->rchild;/*遍历节点右子树*/}}。