我是这么写的非递归,总感觉哪里不对劲,老师能帮着看看吗?

来源:5-7 删除最大值,最小值

zhangjiuding

2017-04-24

    void removeMin1(){
        assert(root != NULL);
        Node* node = root;
        while(node->left != NULL){
            node = node->left;
        }

        node = node->right;
    }


写回答

1回答

liuyubobobo

2017-04-24

你的这个写法,在while循环以后,node找到了二叉树中的最小元素所存储的node。之后,你的语句node = node->right,只是将在这个函数里声明的node指针变量指向了你找到的这个最小元素的右节点,而整个二叉树没有发生改变。


要想改变整个二叉树,你需要找到这个最小元素的父节点,让这个最小元素的父节点的左孩子,指向这个最小元素的右孩子。再想想看:)


加油!

1
5
zhangjiuding
非常感谢老师指点!
2017-04-25
共5条回复

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程