平衡树二叉 BST
定义:左子树<根<右子树
非递归写法
1.代码注释丰富
2.这{}用的太差劲! 找了好久才知道谁是谁的 }{!!!
3.参数介绍:
1.Tree 树结点结构体
2.函数参数 data 传入数据 root 是起点地址,用 *&
3.pPre 追随者,pCur 探路者
#include<cstdio>
#include<vector>
using namespace std;
struct Tree { //树的数据结构 注意下面的指针
int data;
Tree* left;
Tree* right;
};
//造一个二叉搜索树
void insertBST(int data, Tree* &root) { //BST一开始是空的,根据data输入建立BST
Tree* pnew = new Tree; //set up 新结点
pnew->data = data; // 新结点初始化 (3步:数值,空指针)
pnew->left = NULL;
pnew->right = NULL;
if (root == NULL)
{ //根是空的,根就是新来的 结点
root = pnew;
}
else {
Tree* pPre = root; //造两个指针,father: Pre 跟随者, son: Cur 探路者!
Tree* pCur;
while (true) {
if (data < pPre->data) { //一级判断:新来的数,比根节点小
pCur = pPre->left;
if (pCur == NULL) {
pPre->left = pnew;
break; //二级:当左子树是空,那么正好pnew插左子树
}
else {
pPre = pCur; //二级:当左子树不空:让pPre降级为pCur-----继续往左边走,继续循环
}
}
if (data > pPre->data) {
pCur = pPre->right;
if (pCur == NULL) {
pPre->right = pnew;
break;
}
else pPre = pCur;
}
}
}
}
int main(){
Tree* root = NULL;
int a[] = { 2,3,4,5,6 }; //测试成功,数据取递增的
for(int i = 0; i < 5; i++) {
insertBST(a[i], root);
}
}
例题
例题1. 函数区修改:插入成功打印 Pre->data,root==NULL 打印 -1