主题:那位要n叉树遍历的哥哥 小弟想讨论
class NODE
{
public :
DATA data; //数据
int son_id; // 它是父亲的第几个儿子
NODE *father; //父接点
NODE *children[Max_Children];//儿子指针表
NODE ();
NODE (char,NODE *);
~NODE();
};
//*********
int rol=0;
int deep=0;
int node_num_next=0; //用来找出每一层的接点数(当前扩展层接点) 每次扩展生成的接点都是在此插入
int node_num_current=1; //(当前层的接点数)
NODE *pre_node=NULL;
NODE *near_node=NULL;
NODE *base_stack=(NODE *)malloc(sizeof(NODE)*Max_NODE); //define a NODE stack
pre_node=base_stack; //栈底指针
near_node=pre_node+1; //栈顶指针
*pre_node=*father;
while(pre_node!=near_node) //栈顶不等于栈底 注意栈底栈顶指针都是可移动的!
{
for(rol=0;rol<Max_Children;rol++)
{
if(pre_node->children[rol]!=NULL)
{
*near_node=*(pre_node->children[rol]); //push children into stack!
near_node++;
node_num_next++;
}
}
vist(pre_node);//访问该接点
pre_node++;
node_num_current--;
if(node_num_current==0) //记数操作
{node_num_current=node_num_next;
node_num_next=0;
deep++; //当前所在层数
}
}
free(base_stack); //free
//************
就是用一个栈进行接点的扩展
{
public :
DATA data; //数据
int son_id; // 它是父亲的第几个儿子
NODE *father; //父接点
NODE *children[Max_Children];//儿子指针表
NODE ();
NODE (char,NODE *);
~NODE();
};
//*********
int rol=0;
int deep=0;
int node_num_next=0; //用来找出每一层的接点数(当前扩展层接点) 每次扩展生成的接点都是在此插入
int node_num_current=1; //(当前层的接点数)
NODE *pre_node=NULL;
NODE *near_node=NULL;
NODE *base_stack=(NODE *)malloc(sizeof(NODE)*Max_NODE); //define a NODE stack
pre_node=base_stack; //栈底指针
near_node=pre_node+1; //栈顶指针
*pre_node=*father;
while(pre_node!=near_node) //栈顶不等于栈底 注意栈底栈顶指针都是可移动的!
{
for(rol=0;rol<Max_Children;rol++)
{
if(pre_node->children[rol]!=NULL)
{
*near_node=*(pre_node->children[rol]); //push children into stack!
near_node++;
node_num_next++;
}
}
vist(pre_node);//访问该接点
pre_node++;
node_num_current--;
if(node_num_current==0) //记数操作
{node_num_current=node_num_next;
node_num_next=0;
deep++; //当前所在层数
}
}
free(base_stack); //free
//************
就是用一个栈进行接点的扩展