删一个只有一个孩子的(C++)

要删的节点只有一个子节点,做法是【0】。

开始练习 →

删一个有两个孩子的

第 1 步:要删 50:左右都有孩子 第 2 步:去右子树里找最小的 第 3 步:一路往左:最小的是 60 第 4 步:把 60 抄到根上 第 5 步:再删掉右边原来那个 60 50 30 70 20 60 60 要删的节点左右都有孩子,标

开始练习 →

删掉 15 后 13 挂在谁下面

15 只有一个孩子(13)。运行下面这段程序: (这一节只管把节点从树上摘掉,摘下来的内存先不管,下一节讲怎么 delete。) #include <iostream> #include <string> #incl

开始练习 →

自己写把叶子摘掉

补全 bst_remove:用递归删掉 val,返回新的根。这次删的是叶子 13。删完之后输出中序的第一个。 (这一节只管把节点从树上摘掉,摘下来的内存先不管,下一节讲怎么 delete。) (本题用 g++ -std=c++17 -O0

开始练习 →

让唯一的孩子顶上来

同一个 bst_remove,这次删 15——它只有左孩子 13。删完之后输出根的左边是几(13 应该顶了上来)。 (这一节只管把节点从树上摘掉,摘下来的内存先不管,下一节讲怎么 delete。) (本题用 g++ -std=c++17 -

开始练习 →

右子树里最小的顶上来

同一个 bst_remove,这次删 17——它左右都有孩子,是最难的一种。删完之后输出新的根是几。 (这一节只管把节点从树上摘掉,摘下来的内存先不管,下一节讲怎么 delete。) (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

三种删完中序还得升序

同一个 bst_remove,把三种情况连着删一遍:先删叶子 13、再删单孩子 15、最后删双孩子 17。删完之后中序走一遍,把剩下的数按顺序拼起来输出(用 / 隔开)。 (这一节只管把节点从树上摘掉,摘下来的内存先不管,下一节讲怎么 de

开始练习 →

删掉的节点还要做什么

第 1 步:删叶子 20:先让父指针变空 第 2 步:再 delete 它,内存还回去 第 3 步:后序:先孩子后自己,删 30 第 4 步:后序:先孩子后自己,删 60 第 5 步:后序:先孩子后自己,删 70 第 6 步:后序:先孩子后

开始练习 →

双子删除真正 delete 的是谁

删有两个孩子的节点时,先把后继的值抄上来,真正被 delete 的那个节点是【0】。

开始练习 →

为什么用 BNode*& 参数

删除函数写成 void erase(BNode*& node, int val),引用参数的好处是【0】。

开始练习 →