53 lines
1 KiB
Text
53 lines
1 KiB
Text
dataorder=: /:@data reorder ]
|
|
levelorder=: /:@depth@parent reorder ]
|
|
|
|
inorder=: inperm@parent reorder ]
|
|
inperm=:3 :0
|
|
chil=. childinds y
|
|
node=. {.I.(= i.@#) y
|
|
todo=. i.0 2
|
|
r=. i.0
|
|
whilst. (#todo)+.0<:node do.
|
|
if. 0 <: node do.
|
|
if. 0 <: {.ch=. node{chil do.
|
|
todo=. todo, node,{:ch
|
|
node=. {.ch
|
|
else.
|
|
r=. r, node
|
|
node=. _1 end.
|
|
else.
|
|
r=. r, {.ch=. {: todo
|
|
todo=. }: todo
|
|
node=. {:ch end. end.
|
|
r
|
|
)
|
|
|
|
postorder=: postperm@parent reorder ]
|
|
postperm=:3 :0
|
|
chil=. 0,1+childinds y
|
|
todo=. 1+I.(= i.@#) y
|
|
r=. i.0
|
|
whilst. (#todo) do.
|
|
node=. {: todo
|
|
todo=. }: todo
|
|
if. 0 < node do.
|
|
if. #ch=. (node{chil)-.0 do.
|
|
todo=. todo,(-node),|.ch
|
|
else.
|
|
r=. r, <:node end.
|
|
else.
|
|
r=. r, <:|node end. end.
|
|
)
|
|
|
|
preorder=: preperm@parent reorder ]
|
|
preperm=:3 :0
|
|
chil=. childinds y
|
|
todo=. I.(= i.@#) y
|
|
r=. i.0
|
|
whilst. (#todo) do.
|
|
r=. r,node=. {: todo
|
|
todo=. }: todo
|
|
if. #ch=. (node{chil)-._1 do.
|
|
todo=. todo,|.ch end. end.
|
|
r
|
|
)
|