关于递归和非递归?(考试准备中~)

watermelon01 2003-12-16 05:11:06
2。用非递归的方法求一棵二叉树的高度。二叉树每个结点的格式为:左孩子结点指针、数据域、右孩子结点指针。
递归算法如下:
int treeheight(Bitree *t)
{
if(t->data==0) return -1;
int h1 = treeheight(t->lchild);
int h2 = treeheight(t->rchild);
return 1+(h1>h2?h1:h2);

}
如果是改成非递归的话有两种方法:用循环或用栈来实现,对此不是太了解,具体该如何写?请指教!

...全文
115 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ntxs 2003-12-17
  • 打赏
  • 举报
回复
这个题不会。

放心吧,这个题目不会出的。
ymcymc 2003-12-17
  • 打赏
  • 举报
回复
记下每一个结点的层次,然后找出最深的那一个
ymcymc 2003-12-17
  • 打赏
  • 举报
回复
#include "stdio.h"
#include "malloc.h"
#include <iostream>
#include <utility>
#include <stack>
using namespace std;
typedef struct bintreenode
{
char data;
struct bintreenode *lchild,*rchild;
}bintnode,*bitree;

void createbintree(bitree &t)
{
char ch;
scanf("%c",&ch);
if(ch==' ')
t=NULL;
else
{
t=(bintnode*)malloc(sizeof(bintnode));
t->data=ch;
createbintree(t->lchild);
createbintree(t->rchild);
}
}
typedef pair<bitree,int> pairbitree;
int treeheight(bitree t)
{
pairbitree p,p1;
stack<pairbitree> s;
int i=1,max=0;
while(t!=NULL||!s.empty())
{
while(t!=NULL)
{
if(max<i)
max=i;
printf("%c:%d",t->data,i++);
p.first=t;p.second=i;
s.push(p);
t=t->lchild;
}
if(!s.empty())
{
p1=s.top();
t=p1.first;
i=p1.second;
s.pop();
t=t->rchild;
}
}
return max;
}
void main()
{
bitree t;
createbintree(t);
cout<<"TREEHEIGHT:"<<treeheight(t);
}
watermelon01 2003-12-17
  • 打赏
  • 举报
回复
还有别的解吗?

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧