1

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

                                  5
                                 / \
                                2   9
                                \   /
                                 3 7

然后当它打印 3 时,它的深度应该是 2。如果我递归调用它,我将在哪里增加深度。如果我要上树,我将如何减少它?

我的代码是

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
}

我要问的是我会在哪里增加级别以显示节点的适当深度,为什么?

4

2 回答 2

2

无需增加/减少级别。当您进行递归调用时,只需传入一个比当前级别大一的值,当堆栈展开时,前一级别的级别仍将是递归调用之前的值。

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

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
}
于 2019-03-17T01:51:36.300 回答
1

级别变量将帮助您跟踪深度。如果每次进行递归调用时将当前级别 + 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
}
于 2019-03-17T01:59:45.920 回答