【问题标题】:Printing Depth in Post Order Traversal of BSTBST后序遍历中的打印深度
【发布时间】:2019-03-17 09:59:45
【问题描述】:

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

                                  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
}

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

【问题讨论】:

  • ex: post_order(root->left, level+1); 重新考虑为什么,考虑在递归调用中这会变成什么,分别使用下降的 rootlevel 值。

标签: c binary-search-tree postorder


【解决方案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
}

【讨论】:

    【解决方案2】:

    级别变量将帮助您跟踪深度。如果每次进行递归调用时将当前级别 + 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
    }
    

    【讨论】:

    • 是的,遍历逻辑会类似。您需要将打印放置在正确的位置以实现所需的遍历顺序。
    • 尝试在递归调用之前和调用之间放置打印代码并检查结果!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多