C++ BST类中node* makeEmpty(node* t)函数语法含义问询
语法拆解
你熟悉的通用函数定义规则完全适用于这个函数,它没有特殊语法,只是返回值和参数类型用了自定义的结构体指针而已:
return_type function_name( parameter ) ↓ ↓ ↓ node* makeEmpty (node* t)
node是你已经了解的、定义在BST类内部的自定义结构体类型,node*就是指向node类型实例的指针,和你写int*、char*没有本质区别,完全可以作为函数的返回值类型、参数类型使用。- 这个函数的作用是递归释放传入的节点
t,以及t的所有左子树、右子树节点,最后返回空指针NULL。
返回node*而非void的设计原因
如果把这个函数定义成void makeEmpty(node* t),会遇到参数值传递的问题:函数内部拿到的t只是外部传入指针的拷贝,就算你在函数结尾把t赋值为NULL,也改不了外部的原始指针,很容易产生野指针。
而用返回node*的设计,清空树的时候可以直接写:
root = makeEmpty(root);
释放完所有节点的同时直接把根指针root置为NULL,避免野指针问题,写法也更简洁。
内容的提问来源于stack exchange,提问作者Jeffrey Stewart
相关产品推荐
相关产品推荐

