作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以,我不久前开始学习和阅读有关 OOP 的知识,我一直在使用类和对象实现我知道的所有数据结构,只是为了进行整体练习,并熟悉在 C++ 中使用 OOP。
我正在实现树数据结构,我一直想知道如何递归调用一个方法(我知道我必须传入一个参数),这样当我在 main 中创建一个对象并调用一个特定的方法它的编写方式如下 a.inorder();
而不是 a.inorder(root)
因为 root 是私有(private)属性。
这可能吗?
我的代码:
#include<iostream>
using namespace std;
struct node
{
int data;
node* left;
node* right;
};
class tree
{
private:
node* root;
public:
tree();
tree(int val);
void insert(int val);
void preorder();
void postorder();
void inorder();
int count();
};
tree::tree() : root { NULL }
{
}
tree::tree(int val)
{
root = new node;
root->data = val;
root->left = root->right = NULL;
}
void tree::insert(int val)
{
if (!root)
{
root = new node;
root->data = val;
root->left = root->right = NULL;
}
else
{
node* t = root;
node* p = NULL;
while (t)
{
p = t;
if (val > root->data)
t = root->right;
else
t = root->left;
}
t = new node;
t->data = val;
t->left = t->right = NULL;
if (p->data > t->data)
p->left = t;
else
p->right = t;
}
}
void tree::preorder()
{
if (root)
{
}
}
最佳答案
在您的设计中,节点
引用自身。由于它是递归的 node
对象,您可以在 node
上定义递归方法:
struct node
{
int data;
node* left;
node* right;
void preorder() {
//...
left->preorder();
right->preorder();
}
};
然后,tree::preorder()
将调用 root->preorder()
。
关于c++ - 如何在 C++ 类中递归调用函数方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62458871/
我是一名优秀的程序员,十分优秀!