private TreeNode insertNode(TreeNode root, int val) {
// 如果当前节点为空,说明找到了应该插入的位置,创建新节点并返回
if (root == null) {
return new TreeNode(val);
}
// 如果插入的值小于当前节点的值,向左子树插入
if (val < root.val) {
root.left = insertNode(root.left, val);
} else if (val > root.val) {
// 如果插入的值大于当前节点的值,向右子树插入
root.right = insertNode(root.right, val);
}
return root;
}
}
复制代码
搜索节点(查找)
在二叉搜索树中搜索一个特定值的步骤如下:
从根节点开始,将要搜索的值与当前节点的值进行比较。
如果要搜索的值等于当前节点的值,返回true,表示找到了目标值。
如果要搜索的值小于当前节点的值,则向左子树方向继续搜索。
如果要搜索的值大于当前节点的值,则向右子树方向继续搜索。
如果遇到空节点,则表示未找到目标值,返回false。
重复步骤2至步骤5,直到找到目标值或搜索完整个树。
下面是使用上述步骤实现搜索方法的示例代码:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
// 搜索节点
public boolean search(int val) {
return searchNode(root, val);
}
private boolean searchNode(TreeNode root, int val) {
// 当前节点为空,未找到目标值
if (root == null) {
return false;
}
// 目标值与当前节点的值相等,找到目标值
if (val == root.val) {
return true;
} else if (val < root.val) {
// 目标值小于当前节点的值,在左子树中继续搜索
return searchNode(root.left, val);
} else {
// 目标值大于当前节点的值,在右子树中继续搜索
return searchNode(root.right, val);
}
}
}
复制代码
删除节点
在二叉搜索树中删除一个节点的步骤如下:
从根节点开始,找到要删除的节点。
如果要删除的值等于当前节点的值,根据下面不同的情况进行处理:
a. 若该节点为叶节点(没有子节点),直接删除该节点。
b. 若该节点只有一个子节点,将其子节点替代该节点的位置。
c. 若该节点有两个子节点,找到右子树中最小的节点(或左子树中最大的节点),将该节点的值替代要删除的节点的值,然后递归删除该最小节点(或最大节点)。
如果要删除的值小于当前节点的值,则向左子树方向继续搜索。
如果要删除的值大于当前节点的值,则向右子树方向继续搜索。
当遇到空节点时,表示未找到要删除的节点。
完成删除操作。
下面是使用上述步骤实现删除方法的示例代码:
class TreeNode {
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val) {
this.val = val;
this.left = null;
this.right = null;
}
}
class BinarySearchTree {
private TreeNode deleteNode(TreeNode root, int val) {