小编Blo*_*her的帖子

如何在二叉树中使用按顺序遍历查找节点?

我需要在二叉树中找到值为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?

c++

0
推荐指数
1
解决办法
86
查看次数

虚拟析构函数测试失败

#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++

-3
推荐指数
1
解决办法
312
查看次数

标签 统计

c++ ×2