老师,insert不应该返回Node吗?为什么返回的是Node*呢?

来源:5-3 二分搜索树的节点插入

慕仔2270865

2021-11-25

图片描述

写回答

1回答

liuyubobobo

2021-11-26

node 是变量名称。node 的类型是 Node*,请看 node 在参数列表中的类型声明,是 Node*。


为什么返回 Node*?因为我们要返回的是指向 Node 的指针,即 Node*。看上面的代码,node->left 和 node->right 的类型都是指向 Node 的指针,即 Node*,而非一个 Node。所以我们可以写 node->left = insert(..),node->right = insert(...);new Node(...) 返回的也是一个指向 Node 的指针,即 Node*。如果返回的是 Node,将在递归的过程中,一次一次的重新创建整个 Node。而返回 Node*,只是改变变量的指向。


如果你是 Java 程序员,要注意,Java 和 C++ 不一样。对于 Java 来说,一切类对象,本质都是 C++ 中的指针,在 Java 中叫引用。所以,在 Java 语言中,直接写返回 Node 类型,意思就是返回指针。但是 C++ 不是这样的。我不确定你是不是因为这个原因混淆了这一点。


继续加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11187 学习 · 1614 问题

查看课程