二叉树节点删除操作可以分为三种情况:
- 叶子节点
- 有左或右孩子节点
- 既有左孩子又有右孩子
思路:
只为叶子节点,可直接删掉,使用delete()函数(C语言中是free)释放节点;有单个孩子节点,则让孩子节点接替要删除的节点;同时有左右孩子节点,则查找右子树中最小值,将其值付给要删除的节点,然后删除右子树中最小节点(其实就是将要删的节点换了个值,整体结构都不变,删掉的是最小节点)
#include <iostream>
using namespace std;
typedef struct node{
int data;
node* lchild;
node* rchild;
}*bitTree; //这里单独在下面的函数中提到bitTree则等于node*
void insert(bitTree &T,int x)
{
if(T == NULL)
{
T = new node;
T->data = x;
T->lchild = NULL;
T->rchild = NULL;
}
if(x==T->data) return;
else if(x>T->data) insert(T->rchild,x);
else if(x<T->data) insert(T->lchild,x);
}
int display(bitTree T)
{
//先序遍历
if(T!=