private void deleteSingleChildNode(TreeNode node) {
			TreeNode newChild = null;
			if (node.hasLeftChild()) {
				newChild = node.leftChild;
			} else if (node.hasRightChild()) {
				newChild = node.rightChild;
			}
			
			if (node.isRightChild()) {
				node.parent.rightChild = newChild;
				if (this.prematureWiring)
					node.parent.rightIsWire = node.rightIsWire;
			} else {
				node.parent.leftChild = newChild;
				if (this.prematureWiring)
					node.parent.leftIsWire = node.leftIsWire;
			}
			
			if (this.prematureWiring) {
				final TreeNode refNode = node;
				traverse(node, new TraverseCallback() {
					public void action(TreeNode current) {
						fixDeadReference(refNode, current);
					}
				});
			}
		}