public TreeNode<N> deepCopy() {
    TreeNode<N> newNode = new TreeNode(this.value);

    for (TreeNode<N> child : this.children) newNode.addChildNode(child.deepCopy());

    return newNode;
  }