为什么很多 BST 函数返回根而不使用双指针?

血清

我正在编写一个 BST 库,它使用了很多递归函数,这些函数可能会修改树的根。我注意到很多程序员,甚至在 StackOverflow 上,当一个函数可能修改它时,经常返回根节点。

为什么这种做法如此分散?用双指针做同样的事情不好吗?

我在网上搜索,一无所获:/

约翰·博林格

为什么这种做法如此分散?用双指针做同样的事情不好吗?

这主要是风格和偏好的问题。

使用双指针允许函数修改根指针本身,我认为这是有利的,但这意味着您的代码必须同时处理多个间接级别,有些人认为这令人困惑或令人反感。

返回新的根允许保持单一级别的间接性,但它给改变树的函数的所有用户带来了额外的负担:他们必须用函数返回的值更新根指针。这也意味着,如果函数还想返回其他内容,那么您需要一个 out 参数,或返回类型的结构,或类似的,这失去了大部分获得的简单性。

就我个人而言,我不喜欢以上任何一种。与使用裸根指针相比,我更喜欢将根指针放入容器结构中,可能还有关于树的其他一般数据,并将指向该指针的指针传递给方法。尽管从技术上讲这仍然是两个间接级别,但它看起来和感觉更像是一个,并且它允许所涉及的函数自己更新根指针。例子,

struct node {
    int data;
    struct node *left,
    struct node *right;
};

struct tree {
    struct node *root;
    // ... maybe other members ...
};

void insert(struct tree *tree, int data) {
    // ... perform insertion, ultimately finishing with
    tree->root = new_root;
}

当然,它使递归函数实现有点(不多)技巧,但递归对于现实世界的程序通常是一个糟糕的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么我的查询返回的结果很多?

来自分类Dev

BST构建树双指针

来自分类Dev

BST构建树双指针

来自分类Dev

为什么在我的BST遍历中显示指针而不是字符串?

来自分类Dev

为什么应用在调用函数时滞后很多

来自分类Dev

为什么我所有的 BST 遍历都按顺序返回值?

来自分类Dev

使用函数指针遍历 bst 的正确方法

来自分类Dev

为什么在PySide / PyQt中超级使用了很多?

来自分类Dev

为什么很多人在Rails中使用“-%>”而不是“%>”?

来自分类Dev

在处理哈希冲突时,为什么要在BST上使用链表?

来自分类Dev

返回类型“ BST&”是什么意思?

来自分类Dev

使用 SELECT 时只返回 3 行,使用 UPDATE 时,为什么会影响很多行?

来自分类Dev

BST有什么问题

来自分类Dev

为什么 Lerna 在根项目中创建了很多 .tgz 文件?

来自分类Dev

为什么Quicksort具有在输入中有很多重复项的深层函数调用堆栈?

来自分类Dev

为什么我的python代码打印“函数”和很多数字?

来自分类Dev

为什么Quicksort具有在输入中有很多重复项的深层函数调用堆栈?

来自分类Dev

为什么默认不使用双括号?

来自分类Dev

为什么使用运算符`$`比使用`.jcall`表达式要花很多时间

来自分类Dev

使用SuperObject解析字符串时,为什么会出现很多问号?

来自分类Dev

使用SuperObject解析字符串时,为什么会出现很多问号?

来自分类Dev

使用pip下载Python软件包时,为什么会得到很多wheel文件

来自分类Dev

为什么我们在c中使用函数返回指针以及函数返回指针的应用

来自分类Dev

C ++ | BST对节点指针的引用与节点指针

来自分类Dev

为什么不使用指针读取Struct?

来自分类Dev

BST与std :: unique_ptr:在参数中使用右值引用有什么区别?

来自分类Dev

什么时间复杂度具有使用BST对结构数组进行排序的功能?

来自分类Dev

BST的C ++中的回调函数和函数指针故障

来自分类Dev

BST的C ++中的回调函数和函数指针故障

Related 相关文章

  1. 1

    为什么我的查询返回的结果很多?

  2. 2

    BST构建树双指针

  3. 3

    BST构建树双指针

  4. 4

    为什么在我的BST遍历中显示指针而不是字符串?

  5. 5

    为什么应用在调用函数时滞后很多

  6. 6

    为什么我所有的 BST 遍历都按顺序返回值?

  7. 7

    使用函数指针遍历 bst 的正确方法

  8. 8

    为什么在PySide / PyQt中超级使用了很多?

  9. 9

    为什么很多人在Rails中使用“-%>”而不是“%>”?

  10. 10

    在处理哈希冲突时,为什么要在BST上使用链表?

  11. 11

    返回类型“ BST&”是什么意思?

  12. 12

    使用 SELECT 时只返回 3 行,使用 UPDATE 时,为什么会影响很多行?

  13. 13

    BST有什么问题

  14. 14

    为什么 Lerna 在根项目中创建了很多 .tgz 文件?

  15. 15

    为什么Quicksort具有在输入中有很多重复项的深层函数调用堆栈?

  16. 16

    为什么我的python代码打印“函数”和很多数字?

  17. 17

    为什么Quicksort具有在输入中有很多重复项的深层函数调用堆栈?

  18. 18

    为什么默认不使用双括号?

  19. 19

    为什么使用运算符`$`比使用`.jcall`表达式要花很多时间

  20. 20

    使用SuperObject解析字符串时,为什么会出现很多问号?

  21. 21

    使用SuperObject解析字符串时,为什么会出现很多问号?

  22. 22

    使用pip下载Python软件包时,为什么会得到很多wheel文件

  23. 23

    为什么我们在c中使用函数返回指针以及函数返回指针的应用

  24. 24

    C ++ | BST对节点指针的引用与节点指针

  25. 25

    为什么不使用指针读取Struct?

  26. 26

    BST与std :: unique_ptr:在参数中使用右值引用有什么区别?

  27. 27

    什么时间复杂度具有使用BST对结构数组进行排序的功能?

  28. 28

    BST的C ++中的回调函数和函数指针故障

  29. 29

    BST的C ++中的回调函数和函数指针故障

热门标签

归档