树的深度优先遍历

下面是直接用深度优先搜索,优点是过程更自然,缺点是效率没有宽度优先搜索高  
   
  drop   proc   proc__tree  
  go  
   
  create   proc   proc__tree   (@parent   char(20))  
    as  
  begin  
      set   nocount   on  
      declare   @level   int   ,@i   int   ,@flag   int  
      declare   @stack   table   (parent   char(20),child   char(20),level   int,row   int   ,   flag   int)  
      select   @level   =   1,@i=1,@flag=1  
      insert   @stack   select   parent,child,   @level,0,1   from       new_tree     where   parent   =   @parent   and   child   is   not   null  
       
      while   @level   >   0  
      begin  
          if   exists   (select   *   from   @stack   where   level   =   @level   and   flag=1)  
          begin  
                select   @parent   =   min(child)   from   @stack     where   level   =   @level   and   flag=1  
                update   @stack   set   flag   =0   ,   row=@i   where   level   =   @level   and   child   =   @parent   and     flag   =1  
                select   @i   =   @i   +1  
                insert   @stack   select   parent,child,   @level   +   1,0,1   from       new_tree     where   parent   =   @parent   and   child   is   not   null  
                if   @@rowcount   >   0  
                      select   @level   =   @level   +   1  
          end  
          else  
          begin  
              select   @level   =   @level   -   1  
          end  
      end    
      select   row,parent   ,child,level   from   @stack   order   by   row  
      set   nocount   off  
  end  
  go  
  proc__tree   '1'  
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值