删一个叶子后还剩几个
把 17、24、15、13、23 依次插进一棵空的 BST。运行下面这段程序: #include <iostream> #include <string> #include <vector> using
后序释放整棵树
把 17、24、15、13、23 依次插进一棵空的 BST。运行下面这段程序: #include <iostream> #include <string> #include <vector> using
删叶子并归还内存
补全 erase 里「只有一个孩子或没有孩子」那一支:接好孩子,再 drop 掉自己。删掉叶子 13 后,输出「剩几个没归还」和中序,格式如 剩4个:甲-乙-丙-丁。 (本题用 g++ -std=c++17 -O0 编译。)
删单孩子并归还内存
同一个 erase,这次删 15(只有左孩子 13)。补全后输出「剩几个没归还」和中序,格式同上。 (本题用 g++ -std=c++17 -O0 编译。)
删双孩子并归还内存
同一个 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】。