Discussions
Categories
- 385.5K All Categories
- 4.9K Data
- 2.5K Big Data Appliance
- 2.4K Data Science
- 453.4K Databases
- 223.2K General Database Discussions
- 3.8K Java and JavaScript in the Database
- 47 Multilingual Engine
- 606 MySQL Community Space
- 486 NoSQL Database
- 7.9K Oracle Database Express Edition (XE)
- 3.2K ORDS, SODA & JSON in the Database
- 585 SQLcl
- 4K SQL Developer Data Modeler
- 188K SQL & PL/SQL
- 21.5K SQL Developer
- 46 Data Integration
- 46 GoldenGate
- 298.4K Development
- 4 Application Development
- 20 Developer Projects
- 166 Programming Languages
- 295K Development Tools
- 150 DevOps
- 3.1K QA/Testing
- 646.7K Java
- 37 Java Learning Subscription
- 37.1K Database Connectivity
- 201 Java Community Process
- 108 Java 25
- 22.2K Java APIs
- 138.3K Java Development Tools
- 165.4K Java EE (Java Enterprise Edition)
- 22 Java Essentials
- 176 Java 8 Questions
- 86K Java Programming
- 82 Java Puzzle Ball
- 65.1K New To Java
- 1.7K Training / Learning / Certification
- 13.8K Java HotSpot Virtual Machine
- 94.3K Java SE
- 13.8K Java Security
- 208 Java User Groups
- 25 JavaScript - Nashorn
- Programs
- 667 LiveLabs
- 41 Workshops
- 10.3K Software
- 6.7K Berkeley DB Family
- 3.6K JHeadstart
- 6K Other Languages
- 2.3K Chinese
- 207 Deutsche Oracle Community
- 1.1K Español
- 1.9K Japanese
- 474 Portuguese
Binary Search Tree insertion & inorder

Hi,
I have written a program to insert values in a binary search tree and print the values using inorder traversal. Following is my code:
class TreeNode{
int data;
TreeNode left;
TreeNode right;
TreeNode(int data1, TreeNode l, TreeNode r){
data = data1;
left = l;
right =r;
}
}
class bst1{
TreeNode root;
bst1( ) {
root = null;
}
public static void main(String[ ] args){
bst1 obj = new bst1();
int[ ] arr= {90, 75, 10, 20, 30, 40, 50, 70};
for(int i=0; i<8; ++i)
obj.root= obj.insert(arr[i], obj.root);
obj.inorder (obj.root);
}
TreeNode insert(int data, TreeNode t){
if(t ==null) {
t = new TreeNode(data, null, null);
}
else if(t.data<data){
t.right = insert(t.data, t.right);
}
else
t.left = insert(t.data, t.left);
return t;
}
private void inorder(TreeNode r)
{
if(r !=null)
{
inorder(r.left);
System.out.print(r.data +" ");
inorder(r.right);
}
}
}
Can somebody please guide me what's the problem with my code. Its printing only the first node.
>javac bst1.java
>java bst1
90 90 90 90 90 90 90 90
>
Zulfi.
Answers
-
Thanks for Posting an SSCCE.
The problem is here:
TreeNode insert(int data, TreeNode t) { if (t == null) { t = new TreeNode(data, null, null); } else if (t.data < data) { t.right = insert(t.data, t.right); } else { t.left = insert(t.data, t.left); } return t; }
You pass the data of the parent node instead of the new value to the child creation.
better is this
TreeNode insert(int data, TreeNode t) { if (t == null) { t = new TreeNode(data, null, null); } else if (t.data < data) { t.right = insert(data, t.right); } else { t.left = insert(data, t.left); } return t; }
And the best solution was to choose meaningfull names for your identifiers:
TreeNode appendNewNode(int newData, TreeNode currentNode) { if (currentNode == null) { currentNode = new TreeNode(newData, null, null); } else if (currentNode.data < newData) { currentNode.right = appendNewNode(newData, currentNode.right); } else { currentNode.left = appendNewNode(newData, currentNode.left); } return currentNode; }
bye
TPD