在树的遍历中,利用指针来跟踪当前节点是至关重要的。如果没有准确追踪当前节点,可能会导致遍历过程中出现未定义行为,如死循环等问题。
下面给出一个使用指针跟踪当前节点的前序遍历示例:
struct node {
int data;
struct node* left;
struct node* right;
};
void preorder_traversal(struct node* root) {
if (root == NULL) {
return;
}
struct node* current = root;
struct node* stack[100];
int top = -1;
while (1) {
while (current != NULL) {
printf("%d ", current->data);
stack[++top] = current;
current = current->left;
}
if (top == -1) {
break;
}
current = stack[top--];
current = current->right;
}
}
在上述示例中,我们使用一个指针current来跟踪当前节点,每次访问节点时都将其压入栈中,并将其左子树作为当前节点,直到到达叶子节点或者当前节点为NULL时,取出栈顶元素,并将其右子树作为当前节点。这样就能够依次访问树中的所有节点,而不会出现未定义行为的情况。