RosettaCodeData/Task/Deepcopy/Nim/deepcopy-2.nim

37 lines
752 B
Nim

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)
var tree = 1.newNode(
2.newNode(
4.newNode(
7.newNode),
5.newNode),
3.newNode(
6.newNode(
8.newNode,
9.newNode)))
var tree2: Node[int]
tree2.deepCopy tree
tree2.data = 10
tree2.left.data = 20
tree2.right.left.data = 90
echo "Tree2:"
echo preorder tree2
echo "Tree:"
echo preorder tree