阅读背景:

LeetCode-95-不同的二叉搜索树II

来源:互联网 

二叉搜索数的插入、查找、删除

 

public class TestUtil {
    public static void main(String[] args) {
        TreeNode treeNode = new TreeNode();
        List<Integer> list = new ArrayList<>();
        list.add(1);
        list.add(2);
        for (Integer value : list) {
            insert(treeNode, value);
        }

    }

    private static void insert(TreeNode root, Integer value) {
        if (root == null) {
            TreeNode treeNode = new TreeNode();
            treeNode.value = value;
            treeNode.lChild = null;
            treeNode.rChild = null;

            root = treeNode;
        }

        if (root.value > value) {
            insert(root.lChild, value);
        }

        if (root.value < value) {
            insert(root.rChild, value);
        }
    }

    private static TreeNode find(TreeNode root, Integer value) {
        if (root == null || root.value.equals(value)) {
            return root;
        }

        if (root.value > value) {
            return find(root.lChild, value);
        }

        if (root.value < value) {
            return find(root.rChild, value);
        }

        return null;
    }

    private static TreeNode delete(TreeNode root, Integer value) {
        if (root == null) {
            return root;
        }

        TreeNode father = null;
        TreeNode delete = root;
        while(delete != null) {
            if (delete.value.equals(value)) {
                break;
            } if (delete.value > value) {
                father = delete;
                delete = delete.lChild;
            } else {
                father = delete;
                delete = delete.rChild;
            }
        }

        if (delete.lChild != null) {
            if (delete.lChild.rChild == null) {
                delete.value = delete.lChild.value;
                delete.lChild = delete.lChild.lChild;
            } else {
                TreeNode preNode = delete.lChild;
                TreeNode tempNode = delete.lChild.rChild;
                while (tempNode.rChild != null) {
                    preNode = tempNode;
                    tempNode = tempNode.rChild;
                }

                delete.value = tempNode.value;
                preNode.rChild = tempNode.lChild;
            }
            return root;
        }

        if (delete.rChild != null) {
            if (delete.rChild.lChild == null) {
                delete.value = delete.rChild.value;
                delete.rChild = delete.rChild.rChild;
            } else {
                TreeNode preNode = delete.rChild;
                TreeNode tempNode = delete.rChild.lChild;
                while (tempNode.rChild != null) {
                    preNode = tempNode;
                    tempNode = tempNode.rChild;
                }

                delete.value = tempNode.value;
                preNode.rChild = tempNode.lChild;
            }
            return root;
        }

        if (father == null) {
            root = null;
        } else if (father.lChild.value == delete.value) {
            father.lChild = null;
        } else {
            father.rChild = null;
        }

        return root;
    }


}

class TreeNode {
    Integer value;
    TreeNode lChild;
    TreeNode rChild;
}
public class TestUtil {



你的当前访问异常,请进行认证后继续阅读剩余内容。

分享到: