在Java中创建使用二叉搜索树获取前一个节点的方法可以通过以下步骤实现:
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 root;
public BinarySearchTree() {
this.root = null;
}
// 插入节点
public void insert(int val) {
root = insertNode(root, val);
}
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;
}
// 获取前一个节点
public TreeNode getPredecessor(TreeNode node) {
if (node == null) {
return null;
}
// 如果节点有左子节点,则前一个节点为左子树中的最右节点
if (node.left != null) {
TreeNode predecessor = node.left;
while (predecessor.right != null) {
predecessor = predecessor.right;
}
return predecessor;
}
// 如果节点没有左子节点,则前一个节点为其父节点或祖先节点中第一个比它大的节点
TreeNode predecessor = null;
TreeNode current = root;
while (current != null) {
if (node.val > current.val) {
predecessor = current;
current = current.right;
} else if (node.val < current.val) {
current = current.left;
} else {
break;
}
}
return predecessor;
}
}
public class Main {
public static void main(String[] args) {
BinarySearchTree bst = new BinarySearchTree();
bst.insert(5);
bst.insert(3);
bst.insert(7);
bst.insert(2);
bst.insert(4);
bst.insert(6);
bst.insert(8);
TreeNode node = bst.getPredecessor(bst.root.right.right);
if (node != null) {
System.out.println("前一个节点的值为:" + node.val);
} else {
System.out.println("该节点没有前一个节点");
}
}
}
以上代码演示了如何在Java中创建使用二叉搜索树获取前一个节点的方法。在二叉搜索树中,如果节点有左子节点,则前一个节点为左子树中的最右节点;如果节点没有左子节点,则前一个节点为其父节点或祖先节点中第一个比它大的节点。
领取专属 10元无门槛券
手把手带您无忧上云