二进制搜索树 - 打印出叶子数量

时间:2016-12-02 22:57:53

标签: java binary-search-tree

我有一个二元搜索树的程序,该方法搜索特定的单词。我有两个问题。

  1. 首先,我想从这个方法中打印出真或假(基本上是在制作一个system.out,说明是否找到了这个词),我假设我会在主要方面做这个但我不知道怎么做这样做。
  2. 第二个问题是我还需要打印出树中有多少叶子,我打算在方法中使用某种计数器,但是我没有工作。
  3. 我的方法如下,但我也把它包括在课堂内,以帮助消除任何困惑。

    非常感谢任何帮助。

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

1 个答案:

答案 0 :(得分:0)

如何打印true / false:

  1. 创建另一个类,称之为SolutionTest或任何您喜欢的类。
  2. 为其添加主要方法。
  3. 填充您的BST。
  4. 致电System.out.println(check(bstRoot, key))
  5. 您可以查看此链接以了解如何计算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);
    }