2016-04-03 1 views
0

Я упомянул, что это для домашней работы. Я невероятно смущен тем, что мне нужно сделать, чтобы заставить эту функцию add() работать. Сбивая с толку часть состоит в том, что мы должны определить левый и правый дочерние элементы как тип BinaryTree, и иметь функцию add() принять String, а не Node, что я вижу в каждом примере на этом сайте. Я не могу понять, как установить строку для нового дочернего элемента, который является типом BinaryTree.Java - очень запутано об этом рекурсивном двоичном дереве

Любая помощь & руководство оценено.

import java.util.*; 

public class BinaryTree { 
    private String data; 
    private BinaryTree leftChild; 
    private BinaryTree rightChild; 


    public BinaryTree() { 
    data = null; 
    leftChild = null; 
    rightChild = null; 
    } 


    public BinaryTree(String d) { 
    data = d; 
    leftChild = null; 
    rightChild = null; 
    } 

    public BinaryTree(String d, BinaryTree left, BinaryTree right) { 
    data = d; 
    leftChild = left; 
    rightChild = right; 
    } 


    public String getData() { return data; } 
    public BinaryTree getLeftChild() { return leftChild; } 
    public BinaryTree getRightChild() { return rightChild; } 


    public void setData(String d) { data = d; } 
    public void setLeftChild(BinaryTree left) { leftChild = left; } 
    public void setRightChild(BinaryTree right) { rightChild = right; } 


    public String root; 

    //This function is what I'm stuggling with 
    public void add(String item){ 



    if(root==null) 
    { 
     root = item; 
    } 
    else 
    { 
     String tmp = root; // save the current root 
     if(root.compareTo(item)>0) 
     { 
      setData(item); 
      add(item); //I should have setBinaryTree(item) here, but I can't convert type String to BinaryTree?. 
     } 
     else if(root.compareTo(item)<0) 
     { 
      setData(item); 
      add(item); 
     } 
     root = tmp; // put the root back to its original value 
    } 
    return; 
    } 
    } 

ответ

0

Нужно реорганизовать при обходе дерева. Вы в настоящее время пытаетесь добавить на том же узле. Сделайте что-нибудь подобное.

if(root.compareTo(item)>0) 
{ 
    if (leftChild == null) { 
     leftChild = new BinaryTree(item); 
    } else { 
     leftChild.add(item); 
    } 
} 

И сделайте что-нибудь подобное для правильного ребенка.

0

Что вам нужно сделать, так это создать новый объект BinaryTree, используя предоставленные конструкторы и назначив его либо левому, либо правому ребенку.

public void add(String item){ 



    if(root==null){ 
     root = item; 
    }else{ 
     String tmp = root; // save the current root 
     BinaryTree bTree = new BinaryTree() 
     if(root.compareTo(item)>0){ 
      bTree.setData(item); 
      setLeftChild(bTree); 
     }else if(root.compareTo(item)<0){ 
      bTree.setData(item); 
      setRightChild(bTree); 
     } 
     root = tmp; // put the root back to its original value 
    } 
    return; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^