資料生成樹 新增

2022-08-15 22:36:17 字數 3278 閱讀 9077

資料生成樹

使用儲存過程在資料表中生成樹 

資料庫 category1表結構

1.使用儲存過程生成 頂級類

create proc addtopclass

(@id int,

@name varchar(100),

@keyword varchar(255),

@description varchar(255)

)as

declare @dd int

declare @sort varchar(255)

declare @sort1 int

insert into category1([name],pid,keywords,[description])values (@name,0,@keyword,@description)--新增頂級類記錄

if @@error<>0--判斷是否執行

print 100

else

begin

select top 1 @dd=id from category1 order by id desc --將新生成的頂級類記錄id賦值給@dd引數

if @@rowcount=0

print 100

else

begin

select @sort=max(isnull(sort,'')) from category1 where pid=0 --頂級類最大的sort

if @@rowcount=0

print 100

else

begin

set @sort1=0

if @sort=''

set @sort='01'

else

begin

set @sort1=@sort+1

if len(@sort1)=1

set @sort='0'+convert(varchar(255),@sort1)

else if len(@sort1)=2

set @sort=@sort1

endupdate category1 set path=@dd,sort=@sort where id=@dd

end

endend

2 使用儲存過程生成 子類

create proc subclass

(@id int,

@name varchar(100),

@keyword varchar(255),

@description varchar(255)

)as

declare @dd int

declare @sort varchar(255)

declare @sort1 int

declare @sort2 varchar(255)

declare @path varchar(255)

insert into category1(name,pid,keywords,[description]) values(@name,@id,@keyword,@description)

if @@error<>0

print 100

else

begin

select top 1 @dd=id from category1 order by id desc

if @@rowcount=0

print 100

else

begin

select @path=[path]+','+ convert(varchar(50),@dd) ,@sort=sort+',' from category1 where id=@id

select @sort2=max(isnull(sort,'')) from category1 where pid=@id

if @@rowcount=0

print 100

else

begin

set @sort1=0

if @sort2=''

set @sort +='01'

else

begin

set @sort2=right(@sort2,2)

set @sort1=convert(int, @sort2)

set @sort1 += 1

if len(@sort1)=1

set @sort+='0'+convert(varchar(255),@sort1)

else if len(@sort1)=2

set @sort+=@sort1

end

update category1 set path=@path,sort=@sort where id=@dd

end

endend

刪除節點

create  proc deletecatagory

(@id int)

asdeclare @path varchar(500)

if exists (select * from category1 where id=@id)

begin

select @path=[path] from category1 where id=@id

delete from category1 where [path]like ''+@path+'%'

if @@error=0

print 101

else

print 100

endelse

print 100

資料生成 樹

生成乙個 n 個節點的樹和n 1條無向邊 無邊權 生成資料時需要注意無重邊,無環,和所有節點編號都要在邊的資訊中出現。我是把最後一條邊設為 n 1,n 並且在之前保證這兩個節點不連通。這個似乎破壞了一些隨機性 include include include include include inclu...

c 生成遞迴樹,以及自動新增節點

鼓搗了一段時間,自動新增樹形結構怎麼也弄不好,參考了該部落格的 重新寫了下,記錄下遞迴樹的生成方法 using system using system.collections.generic using system.componentmodel using system.data using sy...

資料結構 生成樹和最小生成樹

生成樹 指的是乙個包含了g的所有頂點的樹。生成樹是g的乙個極小連通的子圖。從g的任意頂點出發,做一次深度 廣度優先遍歷,訪問g中的n個頂點,並將順次訪問的兩個頂點之間的路徑記錄,經歷的n條邊就構成了g的極小連通子圖,也就是g的一棵生成樹。對於深度優先 dfs 和廣度優先 bfs 只要在if語句中加入...