请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

前序遍历等会出现死循环

图片描述
老师,我在删除树中的一个元素之后 ,用前序,中序排序时会时不时的遇到这个错误,在没有删除时好使的,请问要怎么解决。

正在回答 回答被采纳积分+3

1回答

liuyubobobo 2021-12-16 16:57:40

说明你的删除逻辑有问题。最大的可能是,删除节点后,某些节点的 left 或者 right 的链接是错误的。


课程代码是没有这个问题,请尝试在课程代码下测试,是否有同样的问题?如果没有,请仔细调试比对,看看自己的代码哪里有问题。


本小节 Java 代码传送门:https://git.imooc.com/coding-71/coding-71/src/master/05-Binary-Search-Tree/Course%20Code%20%28Java%29/08-Binary-Search-Tree-Remove/src/bobo/algo/BST.java


继续加油!:)

0 回复 有任何疑惑可以回复我~
  • 提问者 慕九州7716191 #1
    谢谢老师了,
    else{   // key == node->key
    
                // 待删除节点左子树为空的情况
                if( node.left == null ){
                    Node rightNode = node.right;
                    node.right = null;
                    count --;
                    return rightNode;
                }
    
                // 待删除节点右子树为空的情况
                if( node.right == null ){
                    Node leftNode = node.left;
                    node.left = null;
                    count--;
                    return leftNode;
                }
    
                // 待删除节点左右子树均不为空的情况
    
                // 找到比待删除节点大的最小节点, 即待删除节点右子树的最小节点
                // 用这个节点顶替待删除节点的位置
                Node successor = new Node(minimum(node.right));
                count ++;
    
                successor.right = removeMin(node.right);
                successor.left = node.left;
    
                node.left = node.right = null;
                count --;
    
                return successor;
            }
    
    
    我Node successor = minimum(node.right);有句代码改成这么写为什么就会报错呢
    回复 有任何疑惑可以回复我~ 2021-12-16 17:30:58
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信