急!请教大牛有关c/c++数据结构中二叉树的问题!

定义结构
typedef struct BSTNode
{
int data;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;

之后,定义的变量如下;他们之间有什么区别?
BSTNode p;
BSTNode *p;
BSTree p;
BSTree *p;
BSTNode * p=new BSTNode;
(*t)=(BSTNode*)malloc(sizeof(BSTNode));
void clear(BSTree t){……}
double find(BSTree* t,long k) {……}

各种不懂啊……所以用的时候不知道怎么定义啊~先谢谢各位啦~~
--

BSTNode p; 节点
BSTNode *p;节点指针
BSTree p; 树指针
BSTree *p; 树指针的指针
BSTNode * p=new BSTNode;分配一个节点
(*t)=(BSTNode*)malloc(sizeof(BSTNode)); 分配一个节点。和new 不同的是new会调用构造函数。
void clear(BSTree t){……} 这个应该是删除函数,不过还有看实现。
double find(BSTree* t,long k) {……} 这个应该写查找函数。追问

void clear(BSTree t)
{
if (t==NULL)
{return;}
t->num=0;
clear(t->lchild);
clear(t->rchild);
}这个是在干什么?
double find(BSTree* t,long k) {……} 这个应该写查找第k个数。
这两个怎么定义的时候不一样呢?一个是BSTree t,一个是BSTree* t?为什么?

追答

void clear(BSTree t)
{
if (t==NULL)
{return;}
t->num=0;
clear(t->lchild);
clear(t->rchild);
delete t;
t = NULL;
}
这样才对,这样就可以清空整棵树。没有一个节点。
double find(BSTree* t,long k) {……} 这个应该写查找第k个数。
我认为是多写了*,使用没有必要,给问题解决增加难度。

温馨提示:答案为网友推荐,仅供参考