关于删除树中指定节点的实例分析

Tree *Delete(Tree *T,int n)
{
    //将树中指定节点删除的函数
    Tree *tmp;
    if(T==NULL)
        return NULL;
    if(T->element==n)
    {
        if(T->right==NULL)                       //如果没有右子树,即只有一个该节点儿子左子树
        {                                        //则直接删除
            tmp=T;
            T=T->left;                            //用左子树节点代替父节点
            free(tmp);
        }
        else                                     //如果右子树存在
        {
            tmp=T->right;
            while(tmp->left!=NULL)
                tmp=tmp->left;                   //找到右子树的值最小的节点
            T->element=tmp->element;             //用该节点的值代替原来的节点的值
            T->right=Delete(T->right,tmp->element);                         //递归的删除右子树中用来代替源节点值的节点
            T->height = MAX(Height(T->left),Height(T->right)) + 1;
        }
        return T;
    }
    if(n < T->element)
        T->left = Delete(T->left,n);
    else
        T->right = Delete(T->right,n);
    T->height = MAX(Height(T->left),Height(T->right)) + 1;
    return T;
}

下面以实例来解释,假设要删除下图的节点2,如图,要删除节点2,先看节点2有没有右子树;有右子树,找到其右子树中值最小的节点,于是找到了3;把3的值赋给节点2,现在变成第2附图;下面要递归的删除其右子树中的3节点。5比3大,所以left递归找到3;3有右子树4,所以要找到3的右子树的值最小的节点。4是其唯一的值,肯定是其最小的节点。于是把4赋给3,变成第3幅图;下面要删除4的右子树中给其赋值的节点4.第一个就是4,好巧,看看其有没有右子树,没有,光杆司令一个;直接删除该节点,把NULL赋给4;于是变成第4幅图。
时间: 2024-12-07 04:08:50

关于删除树中指定节点的实例分析的相关文章

jQuery删除表格指定行代码实例

jQuery删除表格指定行代码实例:本章节介绍一下如何删除表格中指定的行,代码非常的简单,直接上代码: $("table tr").eq(2).remove(); 相关阅读:1.eq()函数可以参阅jQuery的eq()方法一章节.2remove()函数可以参阅jQuery的remove()方法一章节. 原文地址是:http://www.softwhy.com/forum.php?mod=viewthread&tid=13213 更多内容可以参阅:http://www.soft

第4章第1节练习题12 删除以指定节点为根节点的所有子树

问题描述 已知二叉树以二叉链表存储,编写算法完成对于树中每一个元素值为x的节点,删去以它为根的子树,并释放相应空间 算法思想 本题可以分成两个部分来完成.第一步:查找值为x的节点:第二步:删除以值为x的节点为根节点的所有子树: 因为删除的是x的所有子树,因此遍历方式应该选择自上而下的遍历方式,即先序遍历或层次遍历方式,这里选择层次遍历的方式实现. 删除值为x的节点的所有子树,可以考虑使用递归的方式: 即此时可以认为删除的是以值为x的节点作为根节点的树: 首先删除该树的叶子节点,这样该树的倒数第二

试验删除RAC(ORA10G)节点

1.环境概述 2.删除一个节点 本实验中以删除第二个节点为示例. 2.1删除数据库实例 在第一个节点上(存活的节点)上使用DBCA删除第二个节点的实例. 执行完以上操作可以看下crs_stat –t  ,这时可以发现已经找不到第二个实例信息了. 2.2清除ASM实例 在第一个节点上(存活的节点)上执行. 检查前后两次对比: 删除ASM实例相关文件 删除ASM实例的初始化参数文件(被删除节点操作) 例如:rm -f /u01/oracle/product/10.2.0/asm_1/dbs/*ASM

javascript删除一个html元素节点代码实例

javascript删除一个html元素节点代码实例:本章节介绍一下如何利用原生javascript实现删除一个指定的html元素.代码实例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title&

动态的添加或者删除指定元素代码实例

动态的添加或者删除指定元素代码实例:本章节介绍一段代码实例,能够动态的添加或者删除指定的元素,这里不管实际应用中此代码出现的概率有多大,只在于如何实现类似的功能,代码实例如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="author" content="http://www.softwhy.com/" /&

XML删除指定节点

今天使用C#操作XML读取配置文件,删除指定节点.本来很简单,但是不注意就会出错哦,拿出来分享下经验    public void Remove(VideoSource videoSource)        { String innerText = videoSource.TypeID + videoSource.Name + videoSource.ThumbPath + videoSource.VideoPath; XmlDocument xml=new XmlDocument(); xm

找到树中指定id的所有父节点

const data = [{ id: 1, children: [{ id: 2, children: [{ id: 3, }, { id: 4, }], }], }, { id: 5, children: [{ id: 6, }], }]; let nodes = []; function getParentNodes(id, tree) { _getParentNodes([], id, tree); return nodes; } function _getParentNodes(his

Mahout机器学习平台之聚类算法详细剖析(含实例分析)

第一部分: 学习Mahout必须要知道的资料查找技能: 学会查官方帮助文档: 解压用于安装文件(mahout-distribution-0.6.tar.gz),找到如下位置,我将该文件解压到win7的G盘mahout文件夹下,路径如下所示: G:\mahout\mahout-distribution-0.6\docs 学会查源代码的注释文档: 方案一:用maven创建一个mahout的开发环境(我用的是win7,eclipse作为集成开发环境,之后在Maven Dependencies中找到相应

红黑树的删除和添加节点

操作 因为每一个红黑树也是一个特化的二叉查找树,因此红黑树上的只读操作与普通二叉查找树上的只读操作相同.然而,在红黑树上进行插入操作和删除操作会导致不再符合红黑树的性质.恢复红黑树的属性需要少量(O(log n))的颜色变更(实际是非常快速的)和不超过三次树旋转(对于插入操作是两次).虽然插入和删除很复杂,但操作时间仍可以保持为 O(log n) 次. 插入 我们首先以二叉查找树的方法增加节点并标记它为红色.(如果设为黑色,就会导致根到叶子的路径上有一条路上,多一个额外的黑节点,这个是很难调整的