标签:arch 指针的引用 struct ack oid tno 二叉查找树 树根 内容
1、二叉查找树的类型定义
typedef int DataType; //结点关键码的数据类型 typedef struct node { DataType data; //结点的数据值 struct node * lchild, *rchild; //指向左、右子女结点的指针 }BiTNode, *BiTree;
注意:BiTNode 等价于 struct node;*BiTree 等价于 struct node*。
2、判别给定的二叉树是否是二叉查找树
void binSearchTree (BiTNode *t, BiTNode * & pr, int & bs) { //t赋予根结点指针root,pr赋予NULL,bs赋予1 //t为当前子树根结点 //pr是当前子树根结点t的前驱指针 if(t != NULL && bs) { binSearchTree (t->lchild, pr,bs); //递归到左子树判断 if(pr == NULL) { pr = t; bs = 1; } else { if(t->data > pr->data) { pr = t; bs = 1; } else bs = 0; } if(bs) binSearchTree (t->rchild, pr,bs); //递归到右子树判断 } }
注意:
1、因为当前子树根结点t的前驱指针的值一直在改变,故采用的是指针的引用形式
2、指针的引用,相当于传递的是: 指针的指针,这样指针的数值是可以改变的;而单传递指针,不传递指针的引用,那么指针指向的数据是可以改变,而指针本身是不可以改变的 (示例)——简单讲:*&指针本身可变; **指针本身不变,仅指向的内容可变
fun(int * pA); // pA的数值在函数返回后不会变化 fun(int*& pA); // pA的数值在函数返回可能会发生变化,如果fun函数内部对pA赋值的话 void InitStack(LNode*& HS) { HS = NULL; // 函数返回后,HS就是NULL了 } void InitStack(LNode* HS) { HS = NULL; // 函数返回后,HS依然是传递进来的数值 }
标签:arch 指针的引用 struct ack oid tno 二叉查找树 树根 内容
原文地址:http://www.cnblogs.com/wxt19941024/p/7400949.html