Java - 对这个递归二叉树非常困惑

时间:2016-04-03 16:24:25

标签: java recursion binary-tree

我会提到这是为了做作业。我非常困惑我需要做些什么来使这个add()函数起作用。令人困惑的部分是我们需要将左右子项定义为BinaryTree类型,并使add()函数采用String而不是Node,我在每个这个网站上的例子。我无法弄清楚如何将字符串设置为新的子节点,类型为BinaryTree。

任何帮助&感谢指导。

    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;
     } 
    }

2 个答案:

答案 0 :(得分:0)

您需要在遍历树时递归。您当前正在尝试在同一节点添加。做这样的事情。

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

为正确的孩子做类似的事情。

答案 1 :(得分: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;
 }