Implement a binary search tree in Java
To implement the binary search tree (BST) in Java, first define the node class, then create the BST class management tree structure, and then implement the insertion and search logic. 1. Define the Node class, including values and left and right child nodes; 2. Create the BinarySearchTree class and set the root node; 3. Implement the insert method, find the correct position through recursion and insert a new node; 4. Add a search method to find the target value recursively according to the size comparison; 5. Optionally implement inorder and other traversal methods to verify the tree structure. The above steps constitute a BST with basic insertion, search and traversal functions.
Implementing a binary search tree (BST) in Java isn't too bad once you understand the structure and logic behind it. The key idea is that each node has at most two children, with the left child being smaller than the parent and the right child being larger.

Let's walk through how to build a basic BST in Java — from defining the node class to inserting values and searching for them.
Define the Node Class
Every node in a BST holds a value and references to its left and right children. So first, we need a Node
class:

class Node { int value; Node left, right; public Node(int item) { value = item; left = right = null; } }
This is straightforward — just an integer value and two points. You can make this more flexible by using generics if you want to support other data types later.
Create the BST Class
Next, create a class to manage the tree. It usually starts with a root node:

class BinarySearchTree { Node root; public BinarySearchTree() { root = null; } // Methods will go here }
This class will hold all the operations like insert, search, delete, etc.
Implement Insertion Logic
Inserting into a BST follows a simple rule: smaller values go to the left, bigger ones to the right.
Here's how the insert method works:
- If the tree is empty, create a new node as the root.
- Otherwise, traverse the tree to find the correct spot.
Here's what the code looks like:
void insert(int value) { root = insertRec(root, value); } Node insertRec(Node root, int value) { if (root == null) { root = new Node(value); return root; } if (value < root.value) root.left = insertRec(root.left, value); else if (value > root.value) root.right = insertRec(root.right, value); return root; }
A few things to note:
- This uses recursion to find the right place to insert.
- Duplicates are typically not allowed in a standard BST, so we skip equal values here.
- You could also write this iteratively if you prefer loops over recursion.
Add Search Functionality
Searching follows the same logic as insertion — compare values and move left or right accordingly.
Here's a simple recursive search method:
boolean search(int value) { return searchRec(root, value); } boolean searchRec(Node root, int value) { if (root == null) return false; if (root.value == value) return true; return value < root.value ? searchRec(root.left, value) : searchRec(root.right, value); }
This returns true
if the value is found, false
otherwise.
If you're working on a more advanced version, you might also want to return the actual node instead of a boolean.
Optional: Add Traversal Methods
To see your tree in action, implement traversal methods like inorder, preorder, or postorder. Inorder traversal gives values in sorted order — which is handy for testing.
Here's an example of inorder traversal:
void inorder() { inorderRec(root); } void inorderRec(Node root) { if (root != null) { inorderRec(root.left); System.out.print(root.value " "); inorderRec(root.right); } }
This helps visualize the structure and verify that insertion works correctly.
At this point, you have a working binary search tree with insert, search, and traversal capabilities. There's more you can do — like deletion or balancing — but those are next steps. For many use cases, especially learning or small applications, this setup is perfectly fine.
Basically that's it.
The above is the detailed content of Implement a binary search tree in Java. For more information, please follow other related articles on the PHP Chinese website!

Hot AI Tools

Undress AI Tool
Undress images for free

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Clothoff.io
AI clothes remover

Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

SetupaMaven/GradleprojectwithJAX-RSdependencieslikeJersey;2.CreateaRESTresourceusingannotationssuchas@Pathand@GET;3.ConfiguretheapplicationviaApplicationsubclassorweb.xml;4.AddJacksonforJSONbindingbyincludingjersey-media-json-jackson;5.DeploytoaJakar

Maven is a standard tool for Java project management and construction. The answer lies in the fact that it uses pom.xml to standardize project structure, dependency management, construction lifecycle automation and plug-in extensions; 1. Use pom.xml to define groupId, artifactId, version and dependencies; 2. Master core commands such as mvnclean, compile, test, package, install and deploy; 3. Use dependencyManagement and exclusions to manage dependency versions and conflicts; 4. Organize large applications through multi-module project structure and are managed uniformly by the parent POM; 5.

First, use JavaScript to obtain the user system preferences and locally stored theme settings, and initialize the page theme; 1. The HTML structure contains a button to trigger topic switching; 2. CSS uses: root to define bright theme variables, .dark-mode class defines dark theme variables, and applies these variables through var(); 3. JavaScript detects prefers-color-scheme and reads localStorage to determine the initial theme; 4. Switch the dark-mode class on the html element when clicking the button, and saves the current state to localStorage; 5. All color changes are accompanied by 0.3 seconds transition animation to enhance the user

Use datetime.strptime() to convert date strings into datetime object. 1. Basic usage: parse "2023-10-05" as datetime object through "%Y-%m-%d"; 2. Supports multiple formats such as "%m/%d/%Y" to parse American dates, "%d/%m/%Y" to parse British dates, "%b%d,%Y%I:%M%p" to parse time with AM/PM; 3. Use dateutil.parser.parse() to automatically infer unknown formats; 4. Use .d

To generate hash values using Java, it can be implemented through the MessageDigest class. 1. Get an instance of the specified algorithm, such as MD5 or SHA-256; 2. Call the .update() method to pass in the data to be encrypted; 3. Call the .digest() method to obtain a hash byte array; 4. Convert the byte array into a hexadecimal string for reading; for inputs such as large files, read in chunks and call .update() multiple times; it is recommended to use SHA-256 instead of MD5 or SHA-1 to ensure security.

The settings.json file is located in the user-level or workspace-level path and is used to customize VSCode settings. 1. User-level path: Windows is C:\Users\\AppData\Roaming\Code\User\settings.json, macOS is /Users//Library/ApplicationSupport/Code/User/settings.json, Linux is /home//.config/Code/User/settings.json; 2. Workspace-level path: .vscode/settings in the project root directory

Yes, a common CSS drop-down menu can be implemented through pure HTML and CSS without JavaScript. 1. Use nested ul and li to build a menu structure; 2. Use the:hover pseudo-class to control the display and hiding of pull-down content; 3. Set position:relative for parent li, and the submenu is positioned using position:absolute; 4. The submenu defaults to display:none, which becomes display:block when hovered; 5. Multi-level pull-down can be achieved through nesting, combined with transition, and add fade-in animations, and adapted to mobile terminals with media queries. The entire solution is simple and does not require JavaScript support, which is suitable for large

Installing the Emmet plug-in can achieve intelligent automatic closing of tags and support abbreviation syntax; 2. Enable "auto_match_enabled":true to allow Sublime to automatically complete simple tags; 3. Use Alt . (Win) or Ctrl Shift . (Mac) shortcut keys to manually close the current tag - it is recommended to use Emmet in daily life. The latter two methods can be combined, which is efficient and simple to set.
