34 lines
861 B
Text
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
|