MSSQL語句遞迴二叉樹

2022-03-13 02:17:59 字數 800 閱讀 2925

如果是單錶內有父子關係,用cte查詢,可找到很多的例子,如果情況複雜點呢?

場景是:訂單之間有關聯關係,表結構被設計成了二叉樹結構,列:orderid (data),copyby (left),copyfrom(right)

如果以指定的任意訂單號查詢出所有與之關聯訂單,語句如下:

--為演示,傳@orderid獲取,直接定義了乙個

declare @orderid int=511000

;with relationorderinfo as (

select orderid,copyfrom,copyby,1 as lev from orders (nolock)

where orderid=@orderid

union all

select a.orderid,a.copyfrom,null,2 as lev

from relationorderinfo as r

join orders as a with (nolock) on a.orderid=r.copyfrom

union all

select a.orderid,null,a.copyby,3 as lev

from relationorderinfo as r

join orders as a with (nolock) on a.orderid=r.copyby

)select * from relationorderinfo

為便於理解,加入了lev列檢視。

關鍵處是兩null值的傳遞,

像不像前序?

二叉樹遞迴

我們來看一下二分搜尋樹的釋放,這就是乙個典型的遞迴問題 function destroy node 這個遞迴包括兩個部分,乙個是遞迴終止條件,乙個是遞迴的執行。我們知道遞迴是不斷地將當前函式壓入函式棧,如果沒有if node null return這個終止條件,當函式棧被壓滿之後就會發生棧溢位 棧的...

遞迴二叉樹

1 基本概念 1 節點 結點包含資料和指向其它節點的指標。2 根節點 樹第乙個結點稱為根節點。3 結點的度 結點擁有的子節點個數。4 葉節點 沒有子節點的節點 度為0 5 父子節點 乙個節點father指向另乙個節點child,則child為孩子節點,father為父親節點。6 兄弟節點 具有相同父...

二叉樹 遞迴

完全二叉樹 只有最後一層不滿,其餘節點都有兩個孩子,並且最後一層的節點從左向右排列,如下圖 擴充二叉樹 每個實節點都有兩個孩子,如圖 類似dfs cout data preorder recursion bt leftchild preorder recursion bt rightchild vo...