c++ - 每个指向节点的 BST 设置高度

标签 c++ search binary-search-tree

我正在尝试实现递归方法以递归地设置每个节点的高度。部分解决方案已实现,但我不完全确定我可以在哪里减少高度并检查特定节点的顺序遍历是否完成。我的程序基于此实现:http://visualgo.net/bst.html

谢谢

最佳答案

如果您在这里的意思是高度代表节点所在的树的级别,那么使用全局变量会给您带来非常奇怪的结果。我也承认不能完全确定您对变量 u 做了什么。

也就是说,我认为您应该接受这样的事情:

public void setHeight(struct node *r, int h = -1) {
    // pointer pointing to null, return
    if(r == NULL)  {
        return;
    }
    h++; // increment height
    r.height = h; // set update height to a current node

    setHeight(r ->u.lc, h); // traverse the list pointing to the left child
    visit(r) // visit pointing node
    setHeight(r ->u.rc, h); // visit right child of the node
}

编辑:我还没有发表评论的名誉,所以我只能通过编辑来回应。 @ProgLearner,你不需要一个单独的变量 u 因为你的节点指针是一个函数参数,所以每次调用函数时你都会有一个新的。同样,正如 Jonathan Mee 所说,h 变量不需要外部初始化,因为它也是函数的本地变量。在您不提供任何初始值的情况下(例如当您在根上调用它时),它将默认为 -1。

关于c++ - 每个指向节点的 BST 设置高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26885942/

相关文章:

excel - 使用通配符在文档中查找字符串;返回完整的字符串 VBA

C++ 无法将函数传递给二叉搜索树遍历方法

java - 求二叉树的高度

c++ - 我如何用两个不同的参数值调用我的模拟方法两次

c++ - c++11 中的关键字 typeof

python - Boost Python Exposing C++ class with constructor taking a std::list

c++ - 如何使用递归打印在 0/1 背包问题中选择的元素

php - PHP/MySQL 中的多词搜索

search - Elasticsearch :URI搜索不准确

c - 在二叉搜索树中插入一个元素会停止工作