二叉树递归遍历中 函数指针做形参的有关问题
二叉树递归遍历中 函数指针做形参的问题
template <typename T>
void inorder_recursive(BinaryNode<T>* root, void (*visit)(T &x))
学校题目要求写个二叉树遍历函数,但是给了这么个函数名。。。后面的形参是个函数指针吗?如果只有根节点做单形参的话我还会写,加了这个形参该怎么写啊?
另外如果要用stack不用遍历的话,该怎么改下面的代码?
template <typename T>
void inorder(BinaryNode<T>* root, void (*visit)(T &x))
{
stack<BinaryNode *> stack1;
BinaryNode *p=root;
while(p!=NULL||!stack1.empty())
{
while(p!=NULL)
{
cout<<p->elem<<" ";
stack1.push(p);
p=p->left;
}
if(!stack1.empty())
{
p=stack1.top();
stack1.pop();
p=p->right;
}
}
}
------解决方案--------------------
是个函数指针。
你需要写一个函数,像下面这样:
然后调用:
在函数 inorder_recursive() 中,每次处理一个节点,就调用:
template <typename T>
void inorder_recursive(BinaryNode<T>* root, void (*visit)(T &x))
学校题目要求写个二叉树遍历函数,但是给了这么个函数名。。。后面的形参是个函数指针吗?如果只有根节点做单形参的话我还会写,加了这个形参该怎么写啊?
另外如果要用stack不用遍历的话,该怎么改下面的代码?
template <typename T>
void inorder(BinaryNode<T>* root, void (*visit)(T &x))
{
stack<BinaryNode *> stack1;
BinaryNode *p=root;
while(p!=NULL||!stack1.empty())
{
while(p!=NULL)
{
cout<<p->elem<<" ";
stack1.push(p);
p=p->left;
}
if(!stack1.empty())
{
p=stack1.top();
stack1.pop();
p=p->right;
}
}
}
------解决方案--------------------
是个函数指针。
你需要写一个函数,像下面这样:
void visit(T &x)
{
// do somthing to 'x'
}
然后调用:
inorder_recursive(root, visit);就可以了。
在函数 inorder_recursive() 中,每次处理一个节点,就调用:
visit(x);