二叉查找树的插入和删除操作
//非递归插入 void Tree_Insert(TreeNode *root,TreeNode *t){ TreeNode *parent=NULL; while (root){ parent=root; if (t->data>root->data){ root=root->right; }else{ root=root->left; } } if (!parent){ //如果是空树 root=t; }else{ if (t->data>parent->data){ parent->right=t; t->parent=parent; }else{ parent->left=t; t->parent=parent; } } } //非递归删除 TreeNode *Tree_Delete(TreeNode *root,TreeNode *del){ TreeNode *t=NULL,*p=NULL; if (root&&del){ if (!del->left||!del->right){ t=del; }else{ t=Tree_Successor(del); } if (t->left){ p=t->left; }else{ p=t->left; } if (p){ p->parent=t->parent; } if(!t->parent){ root=p; }else if (t==t->parent->left){ t->parent->left=p; }else{ t->parent->right=p; } if (t!=del){ del->data=t->data; } } return t; }