RosettaCodeData/Task/Tree-traversal/Lambdatalk/tree-traversal.lambdatalk
2023-07-01 13:44:08 -04:00

34 lines
861 B
Text

{def walk
{def walk.r
{lambda {:o :t}
{if {W.equal? :t nil}
then
else {if {W.equal? :o preorder} then {A.get 0 :t} else}
{walk.r :order {A.get 1 :t}}
{if {W.equal? :o inorder} then {A.get 0 :t} else}
{walk.r :order {A.get 2 :t}}
{if {W.equal? :o postorder} then {A.get 0 :t} else} }}}
{lambda {:o :t}
{S.replace \s by space in {walk.r :o :t}}}}
{def sort
{lambda {:o :t} {S.sort :o {walk preorder :t}}}}
{def T
{A.new 1
{A.new 2
{A.new 4
{A.new 7 nil nil} nil}
{A.new 5 nil nil}}
{A.new 3
{A.new 6
{A.new 8 nil nil}
{A.new 9 nil nil}} nil}}}
{walk preorder {T}} -> 1 2 4 7 5 3 6 8 9
{walk inorder {T}} -> 7 4 2 5 1 8 6 9 3
{walk postorder {T}} -> 7 4 5 2 8 9 6 3 1
{sort < {T}} -> 1 2 3 4 5 6 7 8 9
{sort > {T}} -> 9 8 7 6 5 4 3 2 1