二叉搜索树基本概念和操作

二叉搜索树是左子树的所有值都小于根节点,右子树的所有值都大于根节点的值

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);

    }
}

 

posted @ 2016-03-30 16:31  程序猿进化之路  阅读(157)  评论(0)    收藏  举报