我需要在二叉树中找到值为n的节点并返回它的链接.我必须使用有序遍历才能找到它.为什么?因为这是一个棘手的问题.
我感到困惑,因为我相信实现有序遍历的唯一方法是使用递归.因此,递归自动具有基本条件的return语句,但我们也希望返回找到的节点.所以,这需要另一个返回声明,它可能会让人感到困惑.
节点定义:
struct node {
int item;
node* l; // Link to left child
node* r; // Link to right child
};
typedef node* link;
Run Code Online (Sandbox Code Playgroud)
我的尝试:
link find(link x,int n) {
if (x == 0) return; // Base condition for recursion
find(x->l,n);
if (x->item == n) return x;
find(x->r,n);
}
Run Code Online (Sandbox Code Playgroud)
如果树中不存在给定节点,如何返回null?
#include <iostream>
#include <string>
using namespace std;
class Base {
virtual ~Base() = default;
};
class Derived1 : protected Base {};
class Derived2 : protected Derived1{};
class Derived3 : protected Derived2{};
int main() {
Base* b[] = {new Base, new Derived1, new Derived2, new Derived3};
delete[] b;
cin.get();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下编译错误,我只关注我所教的内容:
警告1警告C4624:'Derived1':无法生成析构函数,因为基类析构函数不可访问或已删除
警告2警告C4624:'Derived2':无法生成析构函数,因为基类析构函数不可访问或已删除
警告3警告C4624:'Derived3':无法生成析构函数,因为基类析构函数不可访问或已删除
错误4错误C2243:'type cast':存在从'Derived1*'到'Base*'的转换,但无法访问
错误5错误C2243:'type cast':存在从'Derived2*'到'Base*'的转换,但无法访问
错误6错误C2243:'type cast':从'Derived3*'到'Base*'的转换存在,但是无法访问
警告7警告C4154:删除数组表达式; 转换为指针提供
8 IntelliSense:不允许转换为不可访问的基类"Base"
9 IntelliSense:不允许转换为不可访问的基类"Derived1"
10 IntelliSense:不允许转换为不可访问的基类"Derived2"
c++ ×2