我是这么写的非递归,总感觉哪里不对劲,老师能帮着看看吗?
来源: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回答
-
你的这个写法,在while循环以后,node找到了二叉树中的最小元素所存储的node。之后,你的语句node = node->right,只是将在这个函数里声明的node指针变量指向了你找到的这个最小元素的右节点,而整个二叉树没有发生改变。
要想改变整个二叉树,你需要找到这个最小元素的父节点,让这个最小元素的父节点的左孩子,指向这个最小元素的右孩子。再想想看:)
加油!
152017-04-25
相似问题