简体   繁体   English

BST中的节点计数

[英]Counting nodes in a BST

folks, I've implemented the code for counting the total number of Nodes in a binary tree and the method looks like the following: 伙计们,我已经实现了用于对二叉树中的Nodes总数进行计数的代码,该方法如下所示:

public int countNodes(Node root){
        int count = 0;

        if(root == null){
            System.out.println("The tree is empty!");
            return -1;
        }
        else{
            count = 1;
            Node current = root;

            if(current.leftChild != null){
                count += countNodes(current.leftChild);
            }

            else if(current.rightChild != null){
                count += countNodes(current.rightChild);
            }
        }
        System.out.print("The total number of nodes in the tree is ");
        return count;
    }

The parameter of the method contains Node root but my question is when I try to run the method from the main class then what should I pass as a parameter?? 该方法的参数包含Node root但我的问题是,当我尝试从main类运行该方法时,应如何将其作为参数传递? what should I add inside the parameters here?: int countNodes = tree1.countNodes("?????????????"); 我应该在这里在参数内添加什么?: int countNodes = tree1.countNodes("?????????????");

package BST;

public class Node {

    int data;
    Node leftChild;
    Node rightChild;

    public void displayNode(){
        System.out.println("The data is " + this.data);
    }
}

class Tree{
    private Node root;

    public Tree(){
        this.root = null;
    }

    public Node find(int key){
        Node current = root;
        while(current.data != key){
            if(key < current.data){
                current = root.leftChild;
            }
            else{
                current = root.rightChild;
            }
            if(current == null){
                System.out.println("The Node contatining the key " + key + " does not exist!");
                return null;
            }

        }
        return current;
    }

    public void insert(int key){
        Node newNode = new Node();

        if(root == null){
            root = newNode;
        }
        else{
            Node current = root;
            Node parent;

            while(true){
                parent = current;
                if(current.data > key){
                    current = current.leftChild;
                    if(current == null){
                        parent.leftChild = newNode;
                        return;
                    }
                }
                else{
                    current = current.rightChild;
                    if(current == null){
                        parent.rightChild = newNode;
                        return;
                    }
                }
            }
        }

    }

    public Node findMin(){
        if(root == null){
            System.out.println("The tree is empty!");
            return null;
        }
        else{
            Node current = root.leftChild;
            Node last = root; 
            while(current != null){
                last = current;
                current = current.leftChild;
            }
            return last;
        }
    }

    public Node findMax(){
        if(root == null){
            System.out.println("The tree is empty!");
            return null;
        }
        else{
            Node current = root.rightChild;
            Node last = root;
            while(current != null){
                last = current;
                current = current.rightChild;
            }
            return last;
        }
    }

    public int countNodes(Node root){
        int count = 0;

        if(root == null){
            System.out.println("The tree is empty!");
            return -1;
        }
        else{
            count = 1;
            Node current = root;

            if(current.leftChild != null){
                count += countNodes(current.leftChild);
            }

            else if(current.rightChild != null){
                count += countNodes(current.rightChild);
            }
        }
        System.out.print("The total number of nodes in the tree is ");
        return count;
    }

Class MainTester 类MainTester

class MainTester{

    public static void main(String[] args){

        Tree tree1 = new Tree();
        tree1.insert(1);
        tree1.insert(2);
        tree1.insert(3);
        tree1.insert(4);
        tree1.insert(5);
        tree1.insert(6);
        tree1.insert(7);
        tree1.insert(8);
        tree1.insert(9);
        tree1.insert(10);

        int countNodes = tree1.countNodes("?????????????");

    }
}

You can use the root node of the tree. 您可以使用树的根节点。 Basing from your example, you can get it from the method find() 根据您的示例,可以从find()方法获得它

int countNodes = tree1.countNodes(tree1.find(1));

You can also use other nodes like 您还可以使用其他节点,例如

int countNodes = tree1.countNodes(tree1.find(5));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM