二叉树删除算法姓名:李晓娜学号:20122593班级:软件一班1、问题描述使用算法实现二叉树的建立及删除
2、解题思路二叉树的删除操作比较复杂,主要分三种情况:1、删除没有子节点的节点,2、删除只有一个节点的节点(其中有分为两种情况),3、删除有两个节点的节点
首先看第一种情况:(删除没有子节点的节点)删除没有子节点的节点只需要将被删除节点的父节点指向空即可第二种情况:(删除只有一个子节点的节点)删除有一个子节点的节点,只需要将被删除节点的父节点指向删除节点的子节点即可第三种情况:(删除有两个子节点的节点,即左右子树都非空)删除有两个子节点的节点,到底谁来替代被删除的节点的位置呢
是左节点,还是右节点,代替以后这个子节点的子节点应该怎么安排
一系列的问题都出来了
简便的方法就是要找一个节点代替这个被删除的节点,这就要从二叉搜索树的定义来看
因为二叉搜索树是有序的,我们要找的节点在这棵树上,而且这个节点要比被删除的左节点大,比右节点小
先看看这个已被删除节点的右节点为根的子树的所有节点的值都要比被删除节点大,这是二叉搜索树定义的,但是要在这个集合中找到最小的一个,来代替被删除的节点,那就要在这棵子树上一直往左找
这个节点比被删除的节点的右节点小,且比左节点大,那这个节点就叫做被删除节点的后继节点,用这个节点来代替被删除节点
3、实验代码#include#includetypedefintInfoType;typedefintKeyType;//假定关键字类型为整数typedefstructnode//结点类型{KeyTypekey;//关键字项InfoTypeotherinfo;//其它数据域,InfoType视应用情况而定下面不处理它structnode*lchild,*rchild;//左右孩子指针}BSTNode;typedefBSTNode*BSTree;//BS