我应该遍历二进制搜索树作为预订,按顺序和后序,并将值插入Java中的Object []。老实说,我不知道如何做到这一点,我需要一些建议。
我的功能:
public Object[] traversePreOrder()
我所需要的只是关于如何完成这项任务的一些想法或提示。 如果我遍历一个树作为预订对象[0]显然是根的值。然后我继续在左侧树中插入我的数组中最左边的值。 接下来,我插入最左边节点的右子节点,如果右节点没有子节点,则继续使用两个节点的父节点。
但是我的方法无法记住哪些值已经被检查和插入。我还考虑过后续遍历,将每个元素放到一个堆栈上并将每个元素推送到我的数组上,但是我对如何实现它的知识有所限制。
帮助!
以下是我认为已经正确的内容:
@Override
public Object[] traversePreOrder() {
Object[] preOrderArray = new Object[elements];
if (elements == 0) {
return preOrderArray;
}
return preOrderArray;
}
差距必须明显填补。
此外,我有基本的方法和构造函数:
BinarySearchTreeNode(T value, BinarySearchTreeNode<T> left,
BinarySearchTreeNode<T> right) {
this.value = value;
this.left = left;
this.right = right;
}
BinarySearchTreeNode(T value) {
this(value, null, null);
}
BinarySearchTreeNode<T> getLeft() {
return left;
}
void setLeft(BinarySearchTreeNode<T> left) {
this.left = left;
}
BinarySearchTreeNode<T> getRight() {
return right;
}
void setRight(BinarySearchTreeNode<T> right) {
this.right = right;
}
T getValue() {
return value;
}
void setValue(T value) {
this.value = value;
}
答案 0 :(得分:0)
使用递归的理想情况。创建方法
List<BinarySearchTreeNode> traverse(BinarySearchTreeNode n) {
// traversal code
}
遍历代码遍历左子项和右子项(如果有),
为根调用traverse
并将结果转换为Object[]
。
答案 1 :(得分:0)
如上所述,这是一般性的想法。我不确定你是否可以让它每次都返回一个列表,但你可能会。但是,如果该实现不起作用,您可以尝试这样的事情,看看其他一切是否正常工作:
private List nodeValues = new ArrayList();
public void traversePreRecursive(BinarySearchTreeNode node)
{
if (node != null)
{
nodeValues.add(node.getValue());
traversePreRecursive(node.getLeft());
traversePreRecursive(node.getRight());
}
}