如何从常规树创建二进制搜索树

时间:2014-12-11 06:00:24

标签: java algorithm tree binary-search-tree

正如标题所述。我正在尝试从我创建的常规树创建二叉搜索树。我的通用节点类的代码是:

Node<E> parent;
E data;
ArrayList<Node<E>> children = new ArrayList<Node<E>>();

public Node(E data){
    this.data = data;
}

public ArrayList<Node<E>> getChildren(){
    return this.children;
}

public void addChild(Node child){
    int counter = 0;
    for (int i = 0; i < children.size(); i++){
        if (child.toString().equals(children.get(i).toString())){
            System.out.println("already exists");
            counter++;
        }
    }
    if (counter > 0){}
    else{   
        children.add(child);
    }

}

public void removeChild(Node<E> child){
    children.remove(child);
}

public Node<E> getChild(Node<E> child){
    for (int i = 0; i < children.size(); i++){
        if (children.get(i) == child){
            return child;
        }
    }
    return null;
}

public void setParent(Node parent){
    this.parent = parent;
}

public Node<E> getParent(){
    return this.parent;
}

public boolean isDirectory(Node node){
    if (data == node.data){
        return false;
    }
    return true;
}

public boolean hasChildren(){
    return getChildren() != null;
}

public E getData(){
    return this.data;
}

public String toString(){
    return data.toString();
}
}//end class

我的树类充满了边缘的方法,所以为了拯救你们所有人的眼睛疲劳,我的树类包括一个根和构造函数,它将根设置为树的根。我知道要将通用树转换为二叉搜索树,我必须将我的通用树根设置为二叉搜索树的根。我的问题是,我从那里去哪里?如何遍历我的常规树以将节点添加到二叉搜索树?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

通用树不是二进制,因为它可能具有任意数量的子节点,并且不是搜索,因为它的节点没有任何特定的顺序。因此,从一般树构造二叉搜索树与在二叉搜索树中插入一般树的所有节点相同。请注意,我不会将此转换称为从一般树中的节点更强构建二进制搜索树。