编辑:我这里没有使用任何密钥,因为它们无法使用我的代码 - 因此我的代码与建议的代码不同。
我上周在大学开始使用二叉树,当我们在树中插入任何东西时,我们主要使用队列作为帮助。但我想知道如果没有队列的帮助就可以做到这一点。到目前为止我制作了这段代码:
public void withoutQueue(Node newNode) {
if (root == null) {
root = newNode;
current = root;
} else if (root != null) {
if (current.left == null) {
current.left = newNode;
newNode.parent = current;
counterleft++;
} else if (current.left != null && current.right == null) {
current.right = newNode;
newNode.parent = current;
counterright++;
} else if (current.left != null && current.right != null && current.left.left == null && counterleft <= counterright) {
Node helper = current;
current = current.left;
current.parent = helper;
counterleft++;
breadthFirstAppend(newNode);
} else if (current.left != null && current.right != null && counterright <= counterleft) {
Node helper = current;
current = current.parent.right;
current.parent = helper;
counterright++;
breadthFirstAppend(newNode);
}
}
}
但是到目前为止它并没有那么好用。它正确插入前三个(root,root.left,root.right) - 然后跳转到第6个插入的节点...我根本不知道该做什么。我添加了反左/右整数,以便我可以通过它控制它,但它没有太大帮助。
我的核心问题是它要么只向左跳(1,2,4,...),要么只跳到右边(1,3,5,...) - 但它应该跳(1, 2,3,4,5,...)。
有关如何改进此代码的任何提示?当我发现自己的东西时,我会更新它。