AVL中这套remove里互斥的逻辑为什么不在BST的时候就优化呢

来源:12-7 从AVL树中删除元素

qq_财神_4

2019-01-09

AVL中这套remove里互斥的逻辑为什么不在BST的时候就优化呢,当时看堆if又if的代码就觉得挺乱的,如果在前面就优化好了,后面看着就不那么难以理解了

写回答

3回答

qq_财神_4

提问者

2019-01-10

另外老师的课程是我见过的课程中设计得非常循序渐进的了,不然我也不会学到这里了,或许只是我的基本功比较薄,所以我希望能在这里多扣一些基本功相关的问题,可能会让老师看得比较业余,所以请老师见谅

0
0

qq_财神_4

提问者

2019-01-10

可能我的表达方式不太好,其实我是想知道以下这段代码


else { //key.compareTo(node.key)==0




            //待删除节点左子树为空情况


            if (node.left == null) {


                Node rightNode = node.right;


                node.right = null;


                size--;


                retNode = rightNode;


            }


            //待删除节点右子树为空情况


            else if (node.right == null) {


                Node leftNode = node.left;


                node.left = null;


                size--;


                retNode = leftNode;


            }


            else {


......


为啥BST的时候不做if和else的优化,跑测试用例就没出问题,但是跑AVL树的时候的时候就出问题了呢



以下是没优化过的BST的代码——————————————————else { //key.compareTo(node.key)==0




            //待删除节点左子树为空情况


            if(node.left==null){


                Node rightNode=node.right;


                node.right=null;


                size--;


                return rightNode;


            }


            //待删除节点右子树为空情况


            if (node.right==null){


                Node leftNode=node.left;


                node.left=null;


                size--;


                return leftNode;


            }


            //待删左右子树均不为空


            //找到待删节点的后继


            //下面是本节的核心代码


            Node successor =minimum(node.right);//successor后继


            successor.right=removeMin(node.right);//这里已经size--了


            //size++;//真较真要+回来


            successor.left=node.left;




            node.left=node.right=null;


            //size--;//两相抵消可以不写


            return successor;


0
3
liuyubobobo
回复
qq_财神_4
哈哈。大赞!这样才有进步啊!继续加油!:)
2019-01-11
共3条回复

liuyubobobo

2019-01-10

抱歉,是我的课程没有设计好,不适合你的思路。不管怎样,最终理解了,学到知识,就好啦:)


继续加油!:)

0
2
qq_财神_4
以下是没优化过的BST的代码——————————————————else { //key.compareTo(node.key)==0 //待删除节点左子树为空情况 if(node.left==null){ Node rightNode=node.right; node.right=null; size--; return rightNode; } //待删除节点右子树为空情况 if (node.right==null){ Node leftNode=node.left; node.left=null; size--; return leftNode; } //待删左右子树均不为空 //找到待删节点的后继 //下面是本节的核心代码 Node successor =minimum(node.right);//successor后继 successor.right=removeMin(node.right);//这里已经size--了 //size++;//真较真要+回来 successor.left=node.left; node.left=node.right=null; //size--;//两相抵消可以不写 return successor;
2019-01-10
共2条回复

玩转数据结构

动态数组/栈/队列/链表/BST/堆/线段树/Trie/并查集/AVL/红黑树…

6221 学习 · 1704 问题

查看课程