It's easy to write.
Using System; Using System. Collections. Generic; Using System. text; Namespace Structure { Class Program { # Region Define Tree node # inclde data, left node, right node and parent node Class Nodes <t> {t data; nodes <t> lnode, rnode, pnode; Public T data {set {DATA = Value ;} Get { Return Data ;}} Public Nodes <t> rnode {set {rnode = Value ;} Get { Return Rnode ;}} Public Nodes <t> lnode {set {lnode = Value ;} Get { Return Lnode ;}} Public Nodes <t> pnode {set {pnode = Value ;} Get { Return Pnode ;}} Public Nodes (){} Public Nodes (t data ){ This . Data = data ;} # Endregion } Static Void Preorder <t> (nodes <t> rootnode ){ If (Rootnode! = Null ) {Console. writeline (rootnode. data ); If (Rootnode. lnode! = Null ) Preorder <t> (rootnode. lnode ); If (Root. rnode! = Null ) Preorder <t> (rootnode. rnode );}} Static Void Midorder <t> (nodes <t> rootnode ){ If (Rootnode! =Null ){ If (Rootnode. lnode! = Null ) Midorder <t> (rootnode. lnode); console. writeline (rootnode. data ); If (Rootnode. rnode! = Null ) Midorder <t> (rootnode. rnode );}} Static Void Afterorder <t> (nodes <t> rootnode ){ If (Rootnode! = Null ){ If (Rootnode. lnode! =Null ) Afterorder <t> (rootnode. lnode ); If (Rootnode. rnode! = Null ) Afterorder <t> (rootnode. rnode); console. writeline (rootnode. Data );}} Static Void Layerorder <t> (nodes <t> rootnode) {queue <t> q = New Queue <t> (); If (Rootnode! = Null ) Q. enque (rootnode ); While (Q! =Null ) {Node tmpnode = Q. deque (); console. writeline (tmpnode. data ); If (Tmpnode. lnode) Q. enqueue (tmpnode. lnode ); If (Tmpnode. rnode) Q. enqueue (tmpnode. rnode )}}}}