二进制搜索树强制我用我的数字输入0

问题描述 投票:-1回答:2

我不确定为什么程序强制进入树中的“0”并将其与其他输入的数字一起排序。它需要构造函数中的输入,我不希望它需要输入。

另外,当用户输入一行整数(如“1 2 3 2 4”)时,如何检查重复项?如何从整数行中删除特定的int?

每次用户输入一些数字时,我最终都会在我的数字组中附加“0”。

构造函数:

public BinarySearchTree(int num) {  
    this.data = num;    
    this.left = null;
    this.right = null;
}

ADDNODE:

        public void addNode(int num) {

        if (num < this.data) {
            if (this.left != null) {
                this.left.addNode(num);
            }       else {
                this.left = new BinarySearchTree(num);
            }

}       else {
        if (this.right != null) {
            this.right.addNode(num);
}       else {
            this.right = new BinarySearchTree(num);
}

}
}

我有traversePreOrdertraversePosttraverseIn

public void traversePreOrder() {
    System.out.print( this.data + " ");
    if( this.left != null ) {
        this.left.traversePreOrder();
    }
    if( this.right != null ) {
        this.right.traversePreOrder();
    }
}
public void traverseInOrder() {
    if( this.left != null ) {
        this.left.traverseInOrder();
    }
        System.out.print( this.data + " ");
    if( this.right != null ) {
        this.right.traverseInOrder();
    }

public void traversePostOrder() {
    if( this.left != null ) {
        this.left.traversePostOrder();
    }   
    if( this.right != null ) {
        this.right.traversePostOrder();
    }
        System.out.print( this.data + " ");
    }

主要:

public static void main(String[] args) {
    boolean duplicates = false,done = false;
    Scanner keyboard = new Scanner(System.in);` 

    BinarySearchTree tree = new BinarySearchTree( 0 );
    System.out.println("Please enter values: " );
    String[] input = keyboard.nextLine().trim().split(" ");
    for(String values: input)
        tree.addNode(Integer.parseInt(values));

预期:预购:1

实际:预订:0 1 //始终放置0

java
2个回答
2
投票

构造函数用于初始化类。您需要修改构造函数。当你编写BinarySearchTree tree = new BinarySearchTree( 0 );时,它也会在你的二叉搜索树中插入值'0'。由于0也是树的一部分,因此您将看到0以及其他数字。


0
投票

在你的Constructor,你期待一个int num,如果你不在你的main类中提供它,它将通过一个错误。那么,你要做的就是明确地定义一个no argument Constructor

public BinarySeacrhTree(){}

现在在你的主类中创建这样的对象:

  BinarySearchTree tree = new BinarySearchTree();

现在,出现重复问题,在我看来,不要打扰你的addNode()应该处理多少重复的用户输入。

如果值小于左侧的currentNode插入。

如果值大于currentNode,则插入右侧。

如果值等于currentNode什么都不做。

第三点是照顾你的要求。如果你需要一些其他的帮助o谁来实现它只是问,我在这里提供帮助。

更新:以下代码将清除您的所有混淆,我故意添加重复值:

class TreeNode
{
    TreeNode leftNode;
    TreeNode rightNode;
    int data;

    public TreeNode(int nodeData)
    {
        data = nodeData;
        leftNode = rightNode = null;
    }

    public void insert(int insertValue)
    {
        if(insertValue < data)
        {
            if(leftNode == null)
                leftNode = new TreeNode(insertValue);
            else
                leftNode.insert(insertValue);
        }
        else if(insertValue > data)
        {
            if(rightNode == null)
                rightNode = new TreeNode(insertValue);
            else
                rightNode.insert(insertValue);
        }
        else{}   // if duplicate then do nothing

    }
}

class Tree
{
    public TreeNode root;
    public Tree()
    {
        root = null;
    }

    public void insertNode(int insertValue)
    {
        if(root == null)
            root = new TreeNode(insertValue);
        else
            root.insert(insertValue);
    }

    public void preOrder()
    {
        preorder(root);
    }

    public void preorder(TreeNode node)
    {
        if(node == null)
            return;
        System.out.printf(" %s",node.data);
        preorder(node.leftNode);
        preorder(node.rightNode);
    }

    public void inOrder()
    {
        inorder(root);
    }

    public void inorder(TreeNode node)
    {
        if(node == null)
            return;

        inorder(node.leftNode);
        System.out.printf(" %s",node.data);
        inorder(node.rightNode);
    }

    public void postOrder()
    {
        postorder(root);
    }

    public void postorder(TreeNode node)
    {
        if(node == null)
            return;

        postorder(node.leftNode);
        postorder(node.rightNode);
        System.out.printf(" %s",node.data);
    }   
}

public class stackMainTree
{
    public static void main(String[] args)
    {
        Tree tree = new Tree();
        tree.insertNode(1);
        tree.insertNode(8);
        tree.insertNode(7);
        tree.insertNode(5);
        tree.insertNode(13);
        tree.insertNode(13);

        tree.inOrder();
    }
}

现在,测试并尝试了解您的处理方式以及如何处理并充分利用OOP。

© www.soinside.com 2019 - 2024. All rights reserved.