我不确定为什么程序强制进入树中的“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);
}
}
}
我有traversePreOrder
,traversePost
和traverseIn
:
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
构造函数用于初始化类。您需要修改构造函数。当你编写BinarySearchTree tree = new BinarySearchTree( 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。