資料生成樹
使用儲存過程在資料表中生成樹
資料庫 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語句中加入...