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
//************
就是用一个栈进行接点的扩展