2016-12-02 2 views
0

У меня есть программа, представляющая двоичное дерево поиска, метод ищет конкретное слово. У меня две проблемы.Двоичное дерево поиска - распечатать количество листов

  1. Во-первых, я хотел бы напечатать истинное или ложное из этого метода (в основном создание system.out, которое говорит, если бы слово было найдено), я предполагаю, что сделаю это в основном, но я не уверен, как это сделать.
  2. Вторая проблема заключается в том, что мне также нужно распечатать, сколько листьев в дереве, я собирался использовать какой-либо счетчик в методе, но я не работал.

Мой метод ниже, но я также включил его в класс, чтобы помочь устранить любую путаницу.

Любая помощь была бы принята с благодарностью.

public boolean check(BSTNode t,String key) 
{ 
    if (t == null) return false; 
    if (t.word.equals(key)) return true; 
    if (check(t.left,key)) return true; 
    if (check(t.right,key)) return true; 
    return false; 
} 

Всего класс:

public class BST 
{ 
    BSTNode root; 
    BST() { 
     root = null; 
    } 

    public void add2Tree(String st) 
    { 
     BSTNode newNode = new BSTNode(st); 
     if (this.root == null) { 
      root = newNode; 
     } else { 
      root = addInOrder(root, newNode); 
     } 
    } 
    // private BSTNode insert2(BSTNode root, BSTNode newNode) 
    // { 
    // if (root == null) 
    // root = newNode; 
    // else { 
    // System.out.println(root.word + " " + newNode.word); 
    // if (root.word.compareTo(newNode.word) > 0) 
    // { 
    // root.left = (insert2(root.lTree, newNode)); 
    // System.out.println(" left "); 
    // } else 
    // { 
    // root.rTree = (insert2(root.rTree, newNode)); 
    // System.out.println(" right "); 
    // } 
    // } 
    // return root; 
    // } 

    public BSTNode addInOrder(BSTNode focus, BSTNode newNode) { 
     int comparevalue = 0; 

     if (focus == null) { 
      focus = newNode; 
     } 

     if (focus != null) { 
      comparevalue = newNode.word.compareTo(focus.word); 
     } 
     if (comparevalue < 0) { 
      focus.left = addInOrder(focus.left, newNode); 
     } else if (comparevalue > 0) { 
      focus.right = addInOrder(focus.right, newNode); 
     } 
     return (focus); 
    } 

    public void ioprint() { 
     System.out.println(" start inorder"); 
     if (root == null) 
      System.out.println(" Null"); 
     printinorder(root); 
    } 

    public void printinorder(BSTNode t) { 
     if (t != null) { 
      printinorder(t.left); 
      System.out.println(t.word); 
      printinorder(t.right); 
     } 
    } 

    public boolean check(BSTNode t,String key) 
    { 
     if (t == null) return false; 
     if (t.word.equals(key)) return true; 
     if (check(t.left,key)) return true; 
     if (check(t.right,key)) return true;  
     return false;  
    } 

    public BSTNode getroot(){ 
     return root; 
    } 
} 

ответ

0

Как напечатать истина/ложь:

  1. Создайте еще один класс, назовем его Solution, Test или что угодно.
  2. Добавить основной метод.
  3. Заполните свой BST.
  4. Звоните System.out.println(check(bstRoot, key)).

Вы можете проверить эту ссылку, чтобы узнать, как подсчитать число узлов в BST, это довольно просто:

Counting the nodes in a binary search tree

private int countNodes(BSTNode current) { 
    // if it's null, it doesn't exist, return 0 
    if (current == null) return 0; 
    // count myself + my left child + my right child 
    return 1 + nodes(current.left) + nodes(current.right); 
} 
Смежные вопросы