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

// 先序遍历伪代码:非递归版本,用栈实现,版本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; 


}

跃然一笑
浏览 228回答 2
2回答

萧十郎

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

慕后森

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