以孩子兄弟表示法存储求树的高度。要用递归和非递归方法。但是我不会写完整程序。谢谢帮忙。要能编译的完

以孩子兄弟表示法存储求树的高度。要用递归和非递归方法。但是我不会写完整程序。谢谢帮忙。要能编译的完,第1张

14.[题目分析]由孩子兄弟链表表示的树,求高度的递归模型是:若树为空,高度为零;若第一子女为空,高度为1和兄弟子树的高度的大者;否则,高度为第一子女树高度加1和兄弟子树高度的大者。其非递归算法使用队列,逐层遍历树,取得树的高度。int Height(CSTree bt) //递归求以孩子兄弟链表表示的树的深度{int hc,hsif (bt==null) return (0)elseif (!bt->firstchild) return (1+height(bt->nextsibling)//子女空,查兄弟的深度else // 结点既有第一子女又有兄弟,高度取子女高度+1和兄弟子树高度的大者{hc=height(bt->firstchild); //第一子女树高hs=height(bt->nextsibling);//兄弟树if(hc+1>hs)return(hc+1)elsereturn (hs)}}//结束heightint height(CSTree t) //非递归遍历求以孩子兄弟链表表示的树的深度{if(t==null) return(0)else{int front=1,rear=1//front,rear是队头队尾元素的指针int last=1,h=0//last指向树中同层结点中最后一个结点,h是树的高度Q[rear]=t//Q是以树中结点为元素的队while(front<=last){t=Q[front++]//队头出列while(t!=null) //层次遍历{if (t->firstchild) Q[++rear]=t->firstchild//第一子女入队t=t->nextsibling//同层兄弟指针后移}if(front>last) //本层结束,深度加1(初始深度为0)h++last=rear} //last再移到指向当前层最右一个结}//while(front<=last)}//else }//Height

template<class elemtype>//二叉树结点

struct nodetype

{

elemtype info//结点信息

nodetype<elemtype>*llink//左子树

nodetype<elemtype>*rlink//右子树

}

template<class elemtype>

void inorder(nodetype<elemtype>*p)//中序遍历

{

if(NULL!=p)

{inorder(p->llink)//使用递归算法先遍历左子树

cout<<p->info<<" "//访问结点

inorder(p->rlink)//遍历右子树

}

}

我也正在学数据结构,也不太会,编了个中序遍历的小程序,仅供参考


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8093255.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存