BiTree biTree = (BiTree) calloc(1, sizeof(BSTNode));//给要插入的树节点创建一个节点
if (T == NULL) { T = biTree; }//判断是否是空树 BiTree p = T, parent;//已经判断出了不是空树,所以就从根节点进行遍历///parent用来记录 //要插入的节点的前一个节点的父节点 while (p) {//如过节点不为空节点 parent = p;//要插入的节点的前一个结点的父节点进行赋值为parent if (i > p->key) { p = p->rchild; } else if (i < p->key) { p = p->lchild; } else { return -1;//不会加入相等的元素,所以当遇到相等的元素的时候就选择返回-1 } }//因为此时已经找到了要插入的位置的父节点 if (i > parent->key) {//比父节点要大,就插入右边 parent->rchild = biTree; } else {//比父节点要小,插入左边 parent->lchild = biTree; }#include <iostream> typedef int keyType; typedef struct BSTNode { keyType key; struct BSTNode *lchild, *rchild; } BSTNode, *BiTree; int BST_Insert(BiTree &T, keyType i) {//用来往BST中插入数据,此段代码比较高能 BiTree biTree = (BiTree) calloc(1, sizeof(BSTNode));//给要插入的树节点创建一个节点 biTree->key = i;//把要插入的节点的值进行赋值 if (T == NULL) { T = biTree; }//判断是否是空树 BiTree p = T, parent;//已经判断出了不是空树,所以就从根节点进行遍历///parent用来记录 //要插入的节点的前一个节点的父节点 while (p) {//如过节点不为空节点 parent = p;//要插入的节点的前一个结点的父节点进行赋值为parent if (i > p->key) { p = p->rchild; } else if (i < p->key) { p = p->lchild; } else { return -1;//不会加入相等的元素,所以当遇到相等的元素的时候就选择返回-1 } }//因为此时已经找到了要插入的位置的父节点 if (i > parent->key) {//比父节点要大,就插入右边 parent->rchild = biTree; } else {//比父节点要小,插入左边 parent->lchild = biTree; } return 0; } void Creat_BSt(BiTree &T, keyType *str, int len) {//*? int i; for (int i = 0; i < len; i++) { BST_Insert(T, str[i]); } } int main() { BiTree T = NULL; keyType str[7] = {11, 22, 33, 44, 5, 66, 77}; Creat_BSt(T, str, 7); return 0; {} }
#include <iostream>
typedef int keyType;
typedef struct BSTNode {
keyType key;
struct BSTNode *lchild, *rchild;
} BSTNode, *BiTree;
int BST_Insert(BiTree &T, keyType i) {//用来往BST中插入数据,此段代码比较高能
BiTree biTree = (BiTree) calloc(1, sizeof(BSTNode));//给要插入的树节点创建一个节点
biTree->key = i;//把要插入的节点的值进行赋值
if (T == NULL) {
T = biTree;
}//判断是否是空树
BiTree p = T, parent;//已经判断出了不是空树,所以就从根节点进行遍历///parent用来记录
//要插入的节点的前一个节点的父节点
while (p) {//如过节点不为空节点
parent = p;//要插入的节点的前一个结点的父节点进行赋值为parent
if (i > p->key) {
p = p->rchild;
} else if (i < p->key) {
p = p->lchild;
} else {
return -1;//不会加入相等的元素,所以当遇到相等的元素的时候就选择返回-1
}
}//因为此时已经找到了要插入的位置的父节点
if (i > parent->key) {//比父节点要大,就插入右边
parent->rchild = biTree;
} else {//比父节点要小,插入左边
parent->lchild = biTree;
}
return 0;
}
void Creat_BSt(BiTree &T, keyType *str, int len) {//*?
int i;
for (int i = 0; i < len; i++) {
BST_Insert(T, str[i]);
}
}
void InOrder(BiTree tree) {//中序
if (tree != NULL) {
InOrder(tree->lchild);//打印左节点
printf("%3d", tree->key);//打印根节点
InOrder(tree->rchild);//打印右节点
}
}
void DeleteNode(BiTree &root, keyType x) {
if (NULL == root) {
return;
}
if (root->key > x) {
DeleteNode(root->lchild, x);
} else if (root->key < x) {
DeleteNode(root->rchild, x);
} else {
if (root->lchild == NULL) {
BiTree temptree = root;
root = root->rchild;
free(temptree);
} else if (root->lchild == NULL) {
BiTree temptree = root;
root = root->lchild;
free(temptree);
} else {
BiTree temptree = root->lchild;
while (temptree->rchild != NULL) {
temptree = temptree->rchild;
}
root->key = temptree->key;
DeleteNode(root->lchild, temptree->key);
}
}
}
int main() {
BiTree T = NULL;
keyType str[7] = {11, 22, 33, 44, 5, 66, 77};
Creat_BSt(T, str, 7);
InOrder(T);
DeleteNode(T,44);
InOrder(T);
return 0;
{}
}