澳门威利斯人_威利斯人娱乐「手机版」

来自 威利斯人娱乐 2019-05-18 18:59 的文章
当前位置: 澳门威利斯人 > 威利斯人娱乐 > 正文

澳门威呢斯人赌场二叉排序树


public void insert(Node p, int k) {
        if (p != null) {
            if (k < p.val)
                if (p.LChild == null) {
                    p.LChild = new Node();
                    p.LChild.val = k;
                } else
                    insert(p.LChild, k);
            else {
                if (p.RChild == null) {
                    p.RChild = new Node();
                    p.RChild.val = k;
                } else
                    insert(p.RChild, k);
            }
        }
}

去除分二种状态:


2叉排序树的删减

二叉排序树插入


二叉排序树构造


在结构二查排序树时,只必要不停调用2叉排序树的插入算法就能够。下边包车型大巴代码是不断从3个数组中收取欲插入的数,然后调用insert方法将其插入到2叉树个中。

private void initBST(Node node, int[] arr) {
        for (int i = 1; i < arr.length; i  ) {
            insert(node, arr[i]);
        }
    }

二叉排序树的探求


招来算法用递归完毕,每趟搜寻时都与根节点进行相比较,假使低于根节点,则往左子树上走。不然,向右子树上走。

public Node search(Node p, int k) {
        if (p != null) {
            if (p.val == k)
                return p;
            else {
                if (k > p.val)
                    return search(p.RChild, k);
                else
                    return search(p.LChild, k);
            }
        } else
            return null;
    }

探求功效深入分析


贰叉排序树的物色作用和树的布局有关。如若树的左右子树中度非凡,那么查找功用为O(logN),不然频率就非常低,最低为O(N)。列如下边两棵树,同样找节点70,则左侧的效用斐然比左边的高。

澳门威呢斯人赌场 1

贰查排序树插入定义:若原2叉树为空,则直接插入节点。不然,若关键字K小于根节点关键字,则插入到左子树中。若关键字K大于根节点关键字,则插入到右子树在那之中。插入的岁月复杂度是树高O(H)

  • 若左子树非空,则左子树上全体结点关键字值均小于根节点关键字值
  • 若右子树非空,则右子树上全部节点关键字值均超越根节点关键字值
  • 左,右子树分别是一颗二叉排序树
  • 设若被去除的节点是卡片节点,就一贯删除
  • 假定被剔除的节点唯有左子树或右子树,则将其左子树或右子树代替该节点
  • 比如左右子树都留存,那么则将其右子树中序遍历的率先个节点First替换该节点(值替换),并将First从树中删除
  • 剔除节点的时日复杂度为O(H)

    public void delete(int k) {

        Node parent = new Node();
        parent.LChild = node;
        Node p = node;
        Node t = null;
        // 找出欲删除的节点P
        while (p != null && p.val != k) {
            parent = p;
            if (k < p.val)
                p = p.LChild;
            else
                p = p.RChild;
        }
        // 欲删节点的左右孩子都不为空
        if (p.LChild != null && p.RChild != null) {
            // 找出p的后继节点(中序遍历)
            Node post = inOrderFisrt(p.RChild);
            // 将后继节点值copy给p
            p.val = post.val;
            // 将欲删除的节点修改为post节点
            p = post;
        }
        // 欲删节点的左孩子或右孩子为空
        if (p.LChild == null)
            t = p.RChild;
        else if (p.RChild == null)
            t = p.LChild;
        if (p == parent.LChild)
            parent.LChild = t;
        else
            parent.RChild = t;
    }
    

中序遍历查找第1个节点

定义

private Node inOrderFisrt(Node t) {
        Node p = null;
        while (t != null) {
            p = t;
            t = t.LChild;
        }
        return p;
    }

本文由澳门威利斯人发布于威利斯人娱乐,转载请注明出处:澳门威呢斯人赌场二叉排序树

关键词: 澳门威利斯人