在树的遍历中,利用指针来跟踪当前节点是至关重要的。如果没有准确追踪当前节点,可能会导致遍历过程中出现未定义行为,如死循环等问题。
下面给出一个使用指针跟踪当前节点的前序遍历示例:
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时,取出栈顶元素,并将其右子树作为当前节点。这样就能够依次访问树中的所有节点,而不会出现未定义行为的情况。