我正在尝试以一种终端(叶节点)节点的左子节点的方式制作一棵树。
链接以查看树的外观。
我得到了我想要的代码的无序版本,它是一个简单的插入函数,可以线程化树,但现在我的问题是将此代码更改为 preOrder 插入。
这是我可以做到的,但我的主要问题是找到预购后继者,它一直在另一个子树中,你们中的任何人都知道获得预购后继者的简单方法吗?
//in-order insert
if (root == null) { // tree is empty
root = newNode;
return;
}
PreNode<T> p = root, prev = null;
while (p != null) { // find a place to insert newNode;
prev = p;
if (info.compareTo(p.info) < 0)
p = p.left;
else if (!p.hasThread) // go to the right node only if it is
p = p.right; // a descendant, not a successor;
else break; // don't follow successor link;
}
if (info.compareTo(prev.info) < 0) { // if newNode is left child of
prev.left = newNode; // its parent, the parent becomes
newNode.hasThread = true; // also its successor;
newNode.right = prev;
}
else if (prev.hasThread) { // if parent of the newNode
newNode.hasThread = true; // is not the right-most node,
prev.hasThread = false; // make parent's successor
newNode.right = prev.right; // newNode's successor,
prev.right = newNode;
}
else prev.right = newNode; // otherwise has no successor;