在 BST 的 Post 顺序遍历中打印深度

Printing Depth in Post Order Traversal of BST

所以现在我实现了顺序遍历,我需要打印节点所在位置的深度。所以如果我的树是这样的:

                                  5
                                 / \
                                2   9
                                \   /
                                 3 7

然后当它打印 3 时它应该有 2 的深度。 如果我调用它,我会在哪里增加深度recursively.And如果我在树上,我会如何减少它?

我的密码是

void post_order(BST* root,int level)
    if(root == NULL){
        return;
    }
    post_order(root -> left,level); 
    post_order(root -> right, level);
    //Here I would print the node info and depth
}

我想问的是我应该在哪里增加级别以显示节点的适当深度以及为什么?

没有必要increment/decrement的水平。当您进行递归调用时,只需传入一个比当前级别大 1 的值,当堆栈展开时,前一级别的级别仍将是递归调用之前的值。

当然,您打印关卡的位置将决定您在遍历树时看到打印的关卡的顺序。

void post_order(BST* root,int level)
    if(root == NULL){
        return;
    }
    post_order(root -> left,level + 1); 
    post_order(root -> right, level + 1);
    //Here I would print the node info and depth
}

级别变量将帮助您跟踪深度。如果每次进行递归调用时将当前级别 + 1 值传递给子级别,您将在每个节点获得正确的深度。根据您希望根深度是 1 还是 0,以根节点和 para 2 为 0 或 1 进行初始调用。

void post_order(BST* root,int level)
if(root == NULL){
    return;
}
post_order(root -> left,level+1); 
post_order(root -> right, level+1);
//print node info, depth = level
}