type Node = auto class data: T; left,right: Node; end; function ND(data: T; left: Node := nil; right: Node := nil) := new Node(data,left,right); procedure Prefix(r: Node); begin if r = nil then exit; Print(r.data); Prefix(r.left); Prefix(r.right); end; procedure Infix(r: Node); begin if r = nil then exit; Infix(r.left); Print(r.data); Infix(r.right); end; procedure Postfix(r: Node); begin if r = nil then exit; Postfix(r.left); Postfix(r.right); Print(r.data); end; procedure LevelOrder(r: Node); begin if r = nil then exit; var q := new Queue>; q.Enqueue(r); while q.Count > 0 do begin var x := q.Dequeue; Print(x.data); if x.left <> nil then q.Enqueue(x.Left); if x.Right <> nil then q.Enqueue(x.Right); end; end; begin var root := ND(1,ND(2,ND(4,ND(7)),ND(5)),ND(3,ND(6,ND(8),ND(9)))); Println(root); Prefix(root); Println; Infix(root); Println; Postfix(root); Println; LevelOrder(root); Println; end.