Java顺序遍历BST的成员函数
Java member function for BST in order traversal
我最近在接受采访时被要求使用下面的 java 成员函数原型为 BST 编写顺序遍历代码。
public void inOrderPrint()
我对它没有接受任何参数这一事实感到困惑。我习惯了要传入的节点。通过传入的节点遍历树非常容易......我只是有点困惑如果没有初始参考怎么办?
如果在 BST 的 Node
class 中定义了 inOrderPrint()
,那么给定的签名是有意义的,那么这意味着要遍历的树就是以当前节点为根的树.或者,树可能是当前 class 中的一个属性。假设该方法在节点 class 中,它会是这样的 - do 注意递归是如何被调用的:
public class Node {
private Node left;
private Node right;
private Object value;
public void inOrderPrint() {
if (left != null)
left.inOrderPrint();
System.out.println(value);
if (right != null)
right.inOrderPrint();
}
}
鉴于它是一个成员函数,可以假设您可以访问根(例如 this.root)。您可以使用传入节点的方法重载此方法。然后,您将使用根调用给定方法中的重载方法。
编辑:
我认为该方法是在树中定义的,而不是在节点中定义的 class。您可以这样做:(确保检查是否为空!)
public void inOrderPrint(){
//traverse down the left tree
this.left.inOrderPrint();
System.out.println(this);
//traverse down the right tree
this.right.inOrderPrint();
}
我最近在接受采访时被要求使用下面的 java 成员函数原型为 BST 编写顺序遍历代码。
public void inOrderPrint()
我对它没有接受任何参数这一事实感到困惑。我习惯了要传入的节点。通过传入的节点遍历树非常容易......我只是有点困惑如果没有初始参考怎么办?
如果在 BST 的 Node
class 中定义了 inOrderPrint()
,那么给定的签名是有意义的,那么这意味着要遍历的树就是以当前节点为根的树.或者,树可能是当前 class 中的一个属性。假设该方法在节点 class 中,它会是这样的 - do 注意递归是如何被调用的:
public class Node {
private Node left;
private Node right;
private Object value;
public void inOrderPrint() {
if (left != null)
left.inOrderPrint();
System.out.println(value);
if (right != null)
right.inOrderPrint();
}
}
鉴于它是一个成员函数,可以假设您可以访问根(例如 this.root)。您可以使用传入节点的方法重载此方法。然后,您将使用根调用给定方法中的重载方法。
编辑:
我认为该方法是在树中定义的,而不是在节点中定义的 class。您可以这样做:(确保检查是否为空!)
public void inOrderPrint(){
//traverse down the left tree
this.left.inOrderPrint();
System.out.println(this);
//traverse down the right tree
this.right.inOrderPrint();
}