Add tasks for all the new languages
This commit is contained in:
parent
9dc3c2bb62
commit
bba7bfd280
13208 changed files with 134745 additions and 0 deletions
47
Task/Tree-traversal/Nim/tree-traversal.nim
Normal file
47
Task/Tree-traversal/Nim/tree-traversal.nim
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
import queues, sequtils
|
||||
|
||||
type
|
||||
Node[T] = ref TNode[T]
|
||||
TNode[T] = object
|
||||
data: T
|
||||
left, right: Node[T]
|
||||
|
||||
proc newNode[T](data: T; left, right: Node[T] = nil): Node[T] =
|
||||
Node[T](data: data, left: left, right: right)
|
||||
|
||||
proc preorder[T](n: Node[T]): seq[T] =
|
||||
if n == nil: @[]
|
||||
else: @[n.data] & preorder(n.left) & preorder(n.right)
|
||||
|
||||
proc inorder[T](n: Node[T]): seq[T] =
|
||||
if n == nil: @[]
|
||||
else: inorder(n.left) & @[n.data] & inorder(n.right)
|
||||
|
||||
proc postorder[T](n: Node[T]): seq[T] =
|
||||
if n == nil: @[]
|
||||
else: postorder(n.left) & postorder(n.right) & @[n.data]
|
||||
|
||||
proc levelorder[T](n: Node[T]): seq[T] =
|
||||
result = @[]
|
||||
var queue = initQueue[Node[T]]()
|
||||
queue.enqueue(n)
|
||||
while queue.len > 0:
|
||||
let next = queue.dequeue()
|
||||
result.add next.data
|
||||
if next.left != nil: queue.enqueue(next.left)
|
||||
if next.right != nil: queue.enqueue(next.right)
|
||||
|
||||
let tree = 1.newNode(
|
||||
2.newNode(
|
||||
4.newNode(
|
||||
7.newNode),
|
||||
5.newNode),
|
||||
3.newNode(
|
||||
6.newNode(
|
||||
8.newNode,
|
||||
9.newNode)))
|
||||
|
||||
echo preorder tree
|
||||
echo inorder tree
|
||||
echo postorder tree
|
||||
echo levelorder tree
|
||||
Loading…
Add table
Add a link
Reference in a new issue