24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1328  |  回复: 11
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

rainbowguy

银虫 (正式写手)


[交流] 【求助】关于未知树状结构存储的问题?请大虾指教!

动态变化演变的数值,这些数值的动态演化、变化过程符合树状的发展,因此我想用树状结构存储这些动态变化演变的数值。但是无法预知整棵树的变化情况,包括树到底有多少层,父树结点有多少个子树结点(但子树结点<8)等。
我的问题是:
(1)这个动态变化、演变的数值(与时间步长有关系)怎样用树状结构实时存储?
(2)如果无法用树状结构去实时存储这些数值,那有没有更好的一种方式去存储这些数值?注:这些数值的演变、动态变化是符合树结构的演化的,即父生子、子生孙的演变关系。

请大虾指教!
回复此楼

» 猜你喜欢

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


rainbowguy(金币+40): 2011-04-06 11:56:33
引用回帖:
Originally posted by rainbowguy at 2011-04-03 18:20:42:
可能是我的表述有问题,没有说清楚。
举个例子,比如一个符合树状结构的系列数值(如身高),这些数值对象具有这种父子结构,但这些数值(身高)具体是多少是提前未知的,当然我们也不可能提前知道。一个父( ...

CODE:
typedef struct _NODE{
        int height;
        int age;
        bool isAlive;        //是否活着
        int childNum;        //当前孩子数量
        struct _node* pchild[8];
}NODE, PNODE;

PNODE root = new NODE;

...        //初始化root的一些语句,pchild[i]==NULL则表示没有孩子

int year = 0;

while(year<设定值){                                //仿真退出的条件,可以是其它
        traverse(root, year);                //从root开始,对整棵树的节点进行遍历
        year++;
}

...        //这个时候,经过year的整棵树就出来了


整个算法的关键自然是在树的遍历函数void traverse(PNODE r, int year)上,这个随便一本算法书或者数据结构书都应该有讲的...随手写个例子吧:

void traverse(PNODE r, int year){
        if(r == NULL) return;
       
        r->height = f1(year); //身高是year的函数
        r->age = f2(year);     //年龄是year的函数
        r->isAlive = f3(year); //是否活着也是year的函数
       
        for(int i=0; i<8; i++){ //遍历孩子
                if(f4(r->height, year)){ //是否在year生孩子?按你说的,跟身高有关系
                        r->pchild[r->childNum] = new NODE;
                       
                        r->pchild[r->childNum]->height = f5(r->height); //初始化孩子状态
                        ...
                       
                        r->childNum++;
                }
               
                traverse(r->pchild[i], year);        //注意!递归深入同理处理孩子节点
        }
}

上面的f1()到f4()这些函数,按照一般仿真习惯,自然里面包含一些随机函数,就不多说了。另外,上面的程序属于“深度优先遍历”的方法。

总而言之,楼主需要拿一本数据结构的书,好好复习一下=,=

[ Last edited by sudo on 2011-4-3 at 19:33 ]
11楼2011-04-03 19:22:50
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 12 个回答

sudo

木虫 (正式写手)


★ ★
微尘、梦想(金币+2): 谢谢回复…… 2011-04-03 17:55:23
树状结构显然可以存储啊,无非就是一堆指针指来指去...
2楼2011-04-02 16:45:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

rainbowguy

银虫 (正式写手)


引用回帖:
Originally posted by sudo at 2011-04-02 16:45:40:
树状结构显然可以存储啊,无非就是一堆指针指来指去...

大虾没明白我的意思,这是动态变化的树,你不知道树的具体结构,但是要存储它,怎么办?
3楼2011-04-02 17:14:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

sudo

木虫 (正式写手)


引用回帖:
Originally posted by rainbowguy at 2011-04-02 17:14:00:
大虾没明白我的意思,这是动态变化的树,你不知道树的具体结构,但是要存储它,怎么办?

呃,虽然树的具体结构不知道,不过,每个节点的结构可以定下来(根据你的描述,不知道我理解是否正确)

struct node{
    int value;
    struct node* pchild[8];
}

然后像创建树根节点,插入子节点什么的,都可以用树的相关算法实现啊...

不知道你的具体需求是什么?
4楼2011-04-02 17:24:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通表情 高级回复(可上传附件)
信息提示
请填处理意见