删双孩子并归还内存
同一个 erase,这次删 17(左右都有孩子)。补全双孩子那一支:抄后继的值,再去右子树里把后继删掉。输出格式同上。 (本题用 g++ -std=c++17 -O0 编译。)
整棵树全部释放
补全 free_tree:按后序(先左右孩子,再自己)把整棵树 drop 掉。补全后输出 alive。 (本题用 g++ -std=c++17 -O0 编译。)
用引用参数删除
补全 erase_ref:参数是 BNode*& node,找到后直接给 node 赋值就能改掉父指针,不用 return。这里只处理「最多一个孩子」的情况。删掉 24(只有左孩子 23)后输出「剩几个没归还」和中序。 (本题用 g
按升序插进去会怎样
第 1 步:按 1、2、3、4 的顺序插 第 2 步:插 1:又挂到最右边 第 3 步:插 2:又挂到最右边 第 4 步:插 3:又挂到最右边 第 5 步:插 4:又挂到最右边 第 6 步:长成一条线:查一次要走 4 层 第 7 步:换成
退化成直线后查找多慢
BST 退化成一条直线之后,查找的复杂度变成【0】。
平衡树要保证的是什么(C++)
各种平衡树(AVL、红黑树)要保证的是【0】。
升序插入之后有多高
把 13、15、17、23、24 按升序依次插入。运行下面这段程序: #include <iostream> #include <string> #include <vector> using names
换个顺序插入之后有多高
同样五个数,改成 17、24、15、13、23 的顺序插入: #include <iostream> #include <string> #include <vector> using namespace
算出升序插入长成多高
补全 height:递归算树高(空树算 0)。这次算的是按升序插入的那棵。 (本题用 g++ -std=c++17 -O0 编译。)
两种顺序的高度差多少
同一个 height,把两棵树都建出来:一棵按升序插、一棵按 17、24、15、13、23 插。输出两个高度之差(升序那棵减另一棵)。 (本题用 g++ -std=c++17 -O0 编译。)