C++数据结构中二叉树遍历问题有一点代码看不懂求帮助
voidPostOrder(void(*visit)(BinTreeNode<T>*t)){PostOrder(root,visit);}函数体中PostOrder(ro...
void PostOrder(void (*visit)(BinTreeNode<T> *t)) { PostOrder(root, visit); }函数体中 PostOrder(root, visit)是什么意思?为什么这里可以出现两个参数?还有就是函数中又调用了自己
展开
3个回答
展开全部
void PostOrder(void (*visit)(BinTreeNode<T> *t))
{
PostOrder(root, visit);
}
虽然只是片段没有上下文,但是拆开来看就懂了。
首先,PostOrder()这个函数不返回数据,其次你把PostOrder的一对括号剥离掉去看,那么括号内只含一个参数:void (*visit)(BinTreeNode<T> *t),它又是一个函数定义,函数名为visit,括号包裹着一个星,代表这是个函数指针,该函数也没有返回值,OK,那么我们分析起来就不用管它们返回什么东西了,注意力集中在visit的定义和参数上。
visit此时作为PostOrder()的形参,因此函数指针visit只在PostOrder内有意义,函数本尊名称叫什么对于PostOrder来说不重要,PostOrder在调用此函数指针能满足其接口即可,该函数的声明为:void(*)(BinTreeNode<T>*),即其也只含一个参数:BinTreeNode<T>类型的指针,而t是形参名。
继续剥离开来看,由于我没看到定义,从类型上看BinTreeNode是一个自定义泛型类,T是可以是个任意基础类型,调用时代入即可.
PostOrder内调用PostOrder(root, visit),类或者当前命名空间中肯定还有个带两个参数的重载函数,由于你没给出代码,我只能猜测其声明如下:
//根节点传递指针
void PostOrder(BinTreeNode<T> * proot , void (*visit)(BinTreeNode<T> * t))
或者是
//根节点直接传递实体
void PostOrder(BinTreeNode<T> root ,void (*visit)(BinTreeNode<T> * t))
实际是传递根节点指针还是结构体要看设计要求,一般传递指针比较方便。root就是根节点,visit就是那个函数指针了,也就是说PostOrder的作用是传递根节点和访问函数的指针给他的兄弟去完成任务。
所以不是调用自己,注意参数个数。
{
PostOrder(root, visit);
}
虽然只是片段没有上下文,但是拆开来看就懂了。
首先,PostOrder()这个函数不返回数据,其次你把PostOrder的一对括号剥离掉去看,那么括号内只含一个参数:void (*visit)(BinTreeNode<T> *t),它又是一个函数定义,函数名为visit,括号包裹着一个星,代表这是个函数指针,该函数也没有返回值,OK,那么我们分析起来就不用管它们返回什么东西了,注意力集中在visit的定义和参数上。
visit此时作为PostOrder()的形参,因此函数指针visit只在PostOrder内有意义,函数本尊名称叫什么对于PostOrder来说不重要,PostOrder在调用此函数指针能满足其接口即可,该函数的声明为:void(*)(BinTreeNode<T>*),即其也只含一个参数:BinTreeNode<T>类型的指针,而t是形参名。
继续剥离开来看,由于我没看到定义,从类型上看BinTreeNode是一个自定义泛型类,T是可以是个任意基础类型,调用时代入即可.
PostOrder内调用PostOrder(root, visit),类或者当前命名空间中肯定还有个带两个参数的重载函数,由于你没给出代码,我只能猜测其声明如下:
//根节点传递指针
void PostOrder(BinTreeNode<T> * proot , void (*visit)(BinTreeNode<T> * t))
或者是
//根节点直接传递实体
void PostOrder(BinTreeNode<T> root ,void (*visit)(BinTreeNode<T> * t))
实际是传递根节点指针还是结构体要看设计要求,一般传递指针比较方便。root就是根节点,visit就是那个函数指针了,也就是说PostOrder的作用是传递根节点和访问函数的指针给他的兄弟去完成任务。
所以不是调用自己,注意参数个数。
追问
谢谢大佬,感激不尽,大佬牛逼
展开全部
这里两个PostOrder是不同的,在c++中称为重载。前一个只有一个函数指针作为参数,后一个是带两个参数的。显然后面这一个应该有定义,估计你没有细看,漏掉了这部分代码。但不管怎么样,它肯定是使用到递归的,就是自己调用自己。
后序遍历这块的实现其实很简单,先左后右,最后根
后序遍历这块的实现其实很简单,先左后右,最后根
追问
谢谢大哥,确实是没注意到,因为书上的代码写的有点分散
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
很高兴为您解答!
出现了两个参数,这两个参数要是同一类型就行。
函数中自己调用自己叫递归。
出现了两个参数,这两个参数要是同一类型就行。
函数中自己调用自己叫递归。
更多追问追答
追问
您好关于两个参数我还是不太明白这是C++中哪一块的知识
追答
我们用的书上好像没有,但是老师这么用过,我一般不这么用
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询