定义二叉排序树
二叉排序树是一种特殊的二叉树,其中每个非叶子节点的值都大于其左子树中所有节点的值,并且小于或等于其右子树中所有节点的值。
如果存在多个具有相同值的节点,它们可以位于左子树或右子树中。
构造过程
空树:如果树为空,则直接将新节点作为根节点。
非空树:
如果待插入节点的值小于当前节点的值,则将其插入到当前节点的左子树中。
如果待插入节点的值大于当前节点的值,则将其插入到当前节点的右子树中。
如果待插入节点的值等于当前节点的值,则可以选择不插入(如果允许重复值),或者将其插入到当前节点的左子树或右子树中(如果不允许重复值)。
递归构造
可以使用递归方法构造二叉排序树。
对于数组中的每个元素,按照上述规则递归地将其插入到树中。
示例代码 (使用Java语言):
public class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public class BinarySortTreeUtil {
public static void add(TreeNode root, int data) {
if (!find(root, data)) {
addNode(root, data);
}
}
private static void addNode(TreeNode root, int data) {
if (data < root.val) {
if (root.left == null) {
root.left = new TreeNode(data);
} else {
addNode(root.left, data);
}
} else {
if (root.right == null) {
root.right = new TreeNode(data);
} else {
addNode(root.right, data);
}
}
}
private static boolean find(TreeNode root, int data) {
if (root == null) {
return false;
}
if (data == root.val) {
return true;
}
return data < root.val ? find(root.left, data) : find(root.right, data);
}
}
前序遍历构造
如果给定了一个二叉排序树的前序遍历序列,可以通过递归方法还原出原始的二叉排序树。
前序遍历的顺序是:根节点 -> 左子树 -> 右子树。
以上步骤和代码示例展示了如何构造一个二叉排序树。