java - 关于二叉查找树的put方法
大家讲道理
大家讲道理 2017-04-18 10:05:44
0
1
653

看二叉查找树的时候看到put方法:

 public void put(Key key, Value val) {
        if (key == null) throw new NullPointerException("first argument to put() is null");
        if (val == null) {
            delete(key);
            return;
        }
        root = put(root, key, val);
        assert check();
    }

    private Node put(Node x, Key key, Value val) {
        //if key存在于以x为结点的子树中则更新它的值
        //then 将以key和val为键值的新结点插入到该子树中
        if (x == null) return new Node(key, val, 1);
        int cmp = key.compareTo(x.key);
        //比它小往左边走
        if      (cmp < 0) x.left  = put(x.left,  key, val);
        //不然往右边走
        else if (cmp > 0) x.right = put(x.right, key, val);
        //找到了就赋新的值
        else              x.val   = val;
        x.size = 1 + size(x.left) + size(x.right);//为什么要+1???
        return x;
    }

为什么要x.size = 1 + size(x.left) + size(x.right);??进入这里的条件是如果该结已存在就赋予新的值吧?那么仅仅是更新一个值为什么要增加1个size呢?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(1)
刘奇

Il y a un problème avec le commentaire. Pour un arbre de recherche binaire, put signifie en fait insérer.

  1. Si cmp < 0 || cmp > 0, alors il y aura un nœud supplémentaire dans le sous-arbre gauche ou le sous-arbre droit, alors la taille sera augmentée de 1

  2. Si cmp==0, cela équivaut à ajouter un nœud en double. Dans des circonstances normales, n'ajoute pas de nœud en double à l'arborescence, mais ajoute 1 au nœud actuel.size

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!