二叉搜索树基本概念和操作
二叉搜索树是左子树的所有值都小于根节点,右子树的所有值都大于根节点的值
package leetcode.tree; /** * 二叉搜索数(左子树<根节点<右子树) * * @author li * */ public class BSTree { public TreeNode insert(TreeNode root, int value) { if (root == null) { root = new TreeNode(); root.value = value; root.left = null; root.right = null; } else { if (root.value > value) { root.left = insert(root.left, value); } else { root.right = insert(root.right, value); } } return root; } public TreeNode deleteNode(TreeNode root, int val) { if (root == null) { throw new NullPointerException("为空"); } if (root.value > val) { root.left = deleteNode(root.left, val); } else if (root.value < val) { root.right = deleteNode(root.right, val); } else if (root.left != null && root.right != null) { // 找到该节点,且节点有左右两个孩子 TreeNode tmp = findMin(root.right); root.value = tmp.value; root.right = deleteNode(root.right, root.value); } else { // 找到该节点,且节点只有一个左子树或者只有一个右子树 if (root.left == null) { root = root.left; } else if (root.right == null) { root = root.right; } } return root; } public void preOrder(TreeNode root) { System.out.println(root.value); if (root.left != null) { middleOrder(root.left); } if (root.right != null) { middleOrder(root.right); } } /** * 寻找二叉树中的最小值 * * @param node * @return */ public TreeNode findMin(TreeNode node) { if (node == null) { return null; } else if (node.left == null) { return node; } else return findMin(node.left); } public void middleOrder(TreeNode root) { if (root.left != null) { middleOrder(root.left); } System.out.println(root.value); if (root.right != null) { middleOrder(root.right); } } public static void main(String[] args) { BSTree bst = new BSTree(); TreeNode root = new TreeNode(); root.value = 4; for (int i = 0; i < 10; i++) { bst.insert(root, i); } bst.middleOrder(root); } }

浙公网安备 33010602011771号