简单的一个问题,请求给出解答(2叉数的)

jsbiz 2004-10-15 03:41:19
有以下的模型
1
2 3
4 5 6 7
8 9 10 11 12 13 14 15
…………
的结构,数量可能有很多 假如1000个 编码最多是1000
要求给出一个号码 计算出下面的节点的值
如 给出7
那么下面的节点的值就是 14 15 28 29 30 31……
程序需要在ASP中实现
请教该怎么做?
思路也可以
谢谢!

...全文
94 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
寻开心 2004-11-10
  • 打赏
  • 举报
回复

左侧子节点的标号是父亲节点的2倍啊
然后往下算就是了
n
2n 2n+1
4n 4n+1 4n+2 4n+3
。。。。。。。。
lamputa_lito 2004-11-10
  • 打赏
  • 举报
回复
用队列来做,下面给出伪码(其中queue表示一种先进先出的队列,get函数指从队列头中取出一个值,put函数指把一个值加到队列尾)

struct tree{
int value;
tree* lch;//左子树
tree* rch;//右子树
};


void printf(queue* q)
{
while(q->length > 0 )
{
T = q->get();

if( T->lch )
{
cout<<T->lch->value<<" ";
if( T->lch->lch )
q->put( T->lch->lch );
if( T->lch->rch )
q->put( T->lch->rch );
}
if( T->rch )
{
cout<<T->rch->value<<" ";
if( T->rch->lch )
q->put( T->lch->lch );
if( T->rch->rch )
q->put( T->lch->rch );
}
}
}

void main()
{
tree* T = new tree;
//...........构造树

queue* q = new queue;
q->put(T);
printf(q);
}
pcs_starfish 2004-10-15
  • 打赏
  • 举报
回复
bool bQuit = false;
for(int k=2;!bQuit;k*=2)
{
for(int j=0;j<k && !bQuit;j++)
{
cout<<i*k+j;
if(i*k+j >= 1000)
bQuit = true;
}
}

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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