使用深度优先遍历比广度优先遍历效率要高

原创 2006年05月17日 13:24:00

问题描述

在Folder_Info表中重置Folder_Level,假设第一级的level是正确的,并且设第一级节点的parent-pkid为0,其他所有节点的级别由该节点的父节点决定.

而其他级别的节点的level可能错误,请校正所有节点的level.例如

Table Schema

CREATE TABLE [dbo].[FOLDER_INFO] (
 [PK_ID] [int] IDENTITY (1, 1) NOT NULL ,
 [PARENT_PKID] [int] NULL ,
 [FOLDER_LEVEL] [int] NULL ,
 [FOLDER_NAME] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
 [FOLDER_DESC] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NULL ,哦
) ON [PRIMARY]

解决方案

可以采用下面的一个存储过程来进行校正,采用广度优先遍历

Create Procedure CorrectFolderLevel
as
declare @FolderLevel int
set @FolderLevel =1
update Folder_Info set Folder_Level=@FolderLevel where Parent_PkId=0
update Folder_Info set Folder_Level=-1 where Parent_PkId!=0
while @FolderLevel<100
begin
update Folder_Info Set Folder_Level=@FolderLevel+1 where Parent_PkId in (Select Pk_Id from Folder_Info where Folder_Level=@FolderLevel)
if @@rowcount=0 break
set @FolderLevel = @FolderLevel+1
end

相关文章推荐

二叉树广度和深度优先遍历

  • 2013年04月20日 16:56
  • 3KB
  • 下载

各种图的创建以及广度,深度优先遍历(临接矩阵存储)

#include #include #include #include #define INFINTY INT_MAX //最大值 #define MaxVertexNum ...

图的广度和深度优先遍历

#include #include using namespace std; typedef char VextexType; typedef int EdgeType; #define V...

邻接表表示的图的深度优先遍历

  • 2011年12月18日 18:23
  • 37KB
  • 下载

邻接表深度优先遍历和广度遍历

循环 队列头文件:Queue.h #ifndef QUEUE_H #define QUEUE_H #define MAXSIZE 20 typedef struct Node{ int d...

C语言以邻接表为存储结构的图的构造以及广度优先,深度优先遍历

关于广度和深度搜索的思路 在上一篇文章已经说过了  如果大家对我的代码有提议以及不正确的地方 还请在文章下方评论出来~轻喷 #include #include #define MAX_VA...

深度优先遍历应用

  • 2013年04月25日 14:55
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用深度优先遍历比广度优先遍历效率要高
举报原因:
原因补充:

(最多只允许输入30个字)