使用递归为二叉搜索树创建遍历。

void inOrder(void (*inOrderPtr)(T&)) 
{ 
    if(this->left != NULL) 
        inOrder((*inOrderPtr)(this->left)); 
    inOrderPtr(this->data); 
    if(this->right != NULL) 
        inOrder((*inOrderPtr)(this->right)); 
} 

这是功能。现在这显然是错误的。这个函数的调用如下:

first.inOrder(print_vals);

首先是对象,而print vals只是一个打印对象中数据的函数。每个对象有三个值,数据,左和右。如何使用该功能实际访问这些项目?

有帮助吗?

解决方案

看起来对 inOrderPtr(this-> data)的调用只是将树节点的 data 成员传递给 print_vals 功能。如果您想访问 left right 元素,请使用 inOrderPtr(* this)。您必须更改各种声明才能进行编译,例如 inOrderPtr print_vals 的声明。如果没有看到代码的其余部分,很难说你需要将它们更改为。

另一方面,在我看来,你可能想要更像这样写递归调用:

this->left->inOrder(inOrderPtr);

我正在对你的实施做出假设。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top