|
|
发表于 2006-3-24 12:15:51
|
显示全部楼层
算法伪代码:
- 0、增设全局量:
- Stack S;
- int t_count;
- int level;
- int line_offset;
- Tree * father_node;
- 1、初始化:
- t_count=0; // root结点所在行首没有一个'\t'
- level=0; // root结点level
- line_offset=1; // root所在行偏移量
- S=push(S , line_offset); //把root结点所在行偏移量压栈
- Tree root_node("root",level, Tree *children[MAX]={NULL}); // 初始化root结点。
- father_node= &root_node;
- 2、重复执行以下步骤,直到读完所有行。
- 读取一行,置 t 为 当前行首 '\t' 个数;
- if (t>t_count){
- line_offset=1;
- push(S,line_offset);
- level++;
- t_count=t;
- Tree *new_entry=new Tree(current_entry_name, level, Tree *children[MAX]={NULL});
- father_node=get_father_node(S); //从栈中获取father_node指针。
- father_node->children[line_offset]=new_entry;
- } else if(t==t_count) {
- pop(S,line_offset);
- line_offset++;
- push(S,line_offset);
- Tree *new_entry=new Tree(current_entry_name, level, Tree *children[MAX]={NULL});
- father_node->children[line_offset]=new_entry;
- } else if(t<t_count) {
- n=t_count-t;
- 进行n+1次pop(S,line_offset);
- father_node=get_father_node(S);
- Tree *new_entry=new Tree(current_entry_name, level, Tree *children[MAX]={NULL});
- father_node->children[line_offset++]=new_entry;
- push(S,line_offset);
- }
复制代码
其中get_father_node(S) 函数表示从栈S中找出当前结点的父结点指针。 方法很简单,从根结点root_node开始,递归下降,下降的次数即S的深度(即S包含的元素个数);栈中的元素指明了每次从children[]偏移的位置。 |
|