| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7407 人关注过本帖
标题:已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一个算 ...
只看楼主 加入收藏
松涛雨露
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-4-18
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:4 
已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一个算法输出A[i]结点的双亲和所有孩子。
哪位高手能帮我改改这个程序的,就最后一个函数好像不对。


已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一个算法输出A[i]结点的双亲和所有孩子。
#include <iostream>
#define MAX 50
using namespace std;
//int input(int b[],int m);
void parent(int b[],int m);
void child(int b[],int n,int m);

int main()
{
    int A[MAX],n,i,x;
   
    cout<<"请输入二叉树的结点个数:";
    cin>>n;
    for (int j=0;j<n;j++)
    {
        cin>>x;
        A[j+1]=x;
    }
    cout<<"请输入结点的位置:";
    cin>>i;
    parent(A,i);
    cout<<"孩子节点为:";
    child(A,n,i);
    cout<<endl;
    return 0;
}
void parent(int b[],int m)
{
if(m==1)
   cout<<"无双亲"<<endl;
else
   cout<<"双亲:"<<b[m/2]<<endl;
}



void child(int b[],int n,int m)           // i为序号
{
     int queue[MAX],front=0,tail=0,p,k=1;
     fflush(stdin);// 队列作为辅助,存储孩子的序号
     queue[0]=m;tail++;
     while(front<tail)
     {
          p=queue[front++];
         if(p!=m){                        //  自身不输出
             cout<<b[p]<<" ";  
            cout<<b[p+1]<<" ";
          }                           
           if(2*p<=n)
             queue[tail++]=2*p;
          else if(2*p+1<=n) queue[tail++]=2*p+1;
        
     }
   
}
搜索更多相关主题的帖子: 二叉树 
2011-05-14 23:32
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
程序代码:
void child(int b[],int n,int m)           // i为序号
{
    if (m <= n)
    {
        cout << b[m] << ' ';
       
        child(b, n, 2*m);
        child(b, n, 2*m+1);
    }
}
2011-05-15 16:27
松涛雨露
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-4-18
收藏
得分:0 
谢谢你了。。。。但好像输出还有点问题,比如说输入二叉树的节点数为9,然后输入1,2,3,4,5,6,7,8,9.应该输出2的所有孩子为4,5,8,9顺序也应该不能反的,结点2自身也不能输出。

[ 本帖最后由 松涛雨露 于 2011-5-16 00:06 编辑 ]
2011-05-16 00:00
寒风中的细雨
Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17
等 级:贵宾
威 望:66
帖 子:1710
专家分:8645
注 册:2009-9-15
收藏
得分:10 
恩 如果要严格的顺序  就到啦树的层序遍历  所以里面的遍历改成程序的遍历就行(相对来说要麻烦点)

本身节点不输出 只要假条判断就可以做到啦 这个没什么问题
2011-05-16 00:18
松涛雨露
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2011-4-18
收藏
得分:0 
层序遍历是什么?谢谢~~
2011-05-16 17:17
快速回复:已知一棵具有n个结点的完全二叉树被顺序存储在一维数组A[n]中,试编写一 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.036042 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved