为了账号安全,请及时绑定邮箱和手机立即绑定

您好,请问Visit函数在以下程序里是什么作用?麻烦帮忙看看

您好,请问Visit函数在以下程序里是什么作用?麻烦帮忙看看

跃然一笑 2022-01-20 21:15:27
// 先序遍历伪代码:非递归版本,用栈实现,版本1 void preOrder1(TNode* root) { Stack S; while ((root != NULL) || !S.empty()) { if (root != NULL) { Visit(root); S.push(root); // 先序就体现在这里了,先访问,再入栈 root = root->left; // 依次访问左子树 } else { root = S.pop(); // 回溯至父亲节点 root = root->right; } } }
查看完整描述

2 回答

?
萧十郎

TA贡献1815条经验 获得超13个赞

应该是起到标记作用,标记被访问过的根节点;因为先序遍历的特点是先访问根节点,再依次遍历左子树,左子树遍历完之后,在回溯到根节点,继续遍历右子树,如果不做标记的话,回溯的时候就不知道哪些节点是被访问过的;

查看完整回答
反对 回复 2022-01-23
?
慕后森

TA贡献1802条经验 获得超5个赞

Visit在这里代表一个泛用的过程,也就是说对子树进行操作的过程。比如说这整个过程,如果是想要输出对应的节点,那在里面可能就是
void Visit(TNode *node)
{
cout<<node->value<<" ";
}
这样的样子;或者,比如要交换每个节点的左右子树,那就是
void Visit(TNode *node){
TNode *temp = node->left;
node->left = node->right;
node->right = temp;
}
这样的形式。总之就是任何可以对单个节点进行操作的代码,根据需要而定。
二叉树遍历是不需要标记的,因为树形结构,每个节点不可能访问超过一次(不存在环的缘故)。



查看完整回答
反对 回复 2022-01-23
  • 2 回答
  • 0 关注
  • 227 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号