/****************************************************
BST.h
***************************************************/
// 定义节点
typedef struct node
{ struct node * parent;
struct node *left;
struct node *right;
int key;
}Node;
void Tree_Insert(Node ** p_node,Node *z);
void Inorder_Tree_Walk(Node * root);
Node * Tree_Search(Node *root,int k);
Node * Tree_Minimum(Node * root);
Node * Tree_Maximum(Node * root);
Node * Tree_Successor(Node * x);
Node * Tree_Predecessor(Node * x);
void Transplant(Node ** p_node,Node * u,Node *v);
void Tree_Delet(Node ** p_node,Node * u);
/*************************************************
BST.c
包括插入节点、删除节点、中序遍历(排序)、查找节点、前继、后继、最小节点、最大节点
************************************************/
#include "BST.h"
#include <stdlib.h>
#include <stdio.h>
//function--插入元素
//p_node-- 指向root的指针的指针
//z--指向插入元素的指针
/******************************
iterative version
*****************************/
void Tree_Insert(Node ** p_node,Node *z)
{ Node *y=NULL;// 初始化辅助节点指针
Node *x=*p_node;// 节点x指向头节点
//迭代查找待插入节点z的父节点
while(x!=NULL)
{ y=x;
if(x->key<z->key)
x=x->right;
else
x=x->left;
}
z->parent=y;// 节点