c语言-关于C Primer Plus第5版的二叉树的问题

问题描述

关于C Primer Plus第5版的二叉树的问题

//从树中删除一个项目
bool DeleteItem(const Item *pi,Tree *ptree)
{
Pair look;
look = SeekItem( pi, ptree);
//如果要删除的项目本身不存在
if(look.child == NULL)
{
return false;
}

//删除根项目
if(look.child == ptree->root)
{
    DeleteNode(&ptree->root);
}
else if(look.parent->left == look.child)
    //DeleteNode(&look.parent->left);
    DeleteNode(&(look.child));
else
    //DeleteNode(&look.parent->right);
    DeleteNode(&(look.child));
ptree->size--;
return true;

}

    DeleteNode(&look.parent->left);
    DeleteNode(&(look.child));删不干净,这是为什么

解决方案

typedef struct pair
{
Node *parent;
Node *child;
}Pair;

static Pair SeekItem(const Item *pi,const Tree *ptree)
{
Pair look;
look.parent = NULL;
look.child = ptree->root;

if(look.child == NULL)
    return look;

while(look.child != NULL)
{
    if(ToLeft(pi, &(look.child->item)))
    {
        look.parent = look.child;
        look.child = look.child->left;
    }
    else if(ToRight(pi, &(look.child->item)))
    {
        look.parent = look.child;
        look.child = look.child->right;
    }
    else
    {
        //不在左子树,也不在右子树,即找到指定节点
        break;
    }
}

return look;

}

解决方案二:

《C Primer Plus(第5版)中文版》第7章编程练习第5题
C Primer Plus(第5版)中文版
C Primer Plus(第5版)的笔记

解决方案三:

static void DeleteNode(Node **ptr)
{
Node *temp;

printf("ptr->name = %s
",(*ptr)->item.petname);

// 3种情况

// 1、2删除的节点没有子节点,删除的节点只有一个子节点
if((*ptr)->left == NULL)
{
    temp = *ptr;
    *ptr = (*ptr)->right;
    free(temp);
    temp->left = NULL;
    temp->right = NULL;
}
else if((*ptr)->right == NULL)
{
    temp = *ptr;
    *ptr = (*ptr)->left;
    free(temp);
    temp->left = NULL;
    temp->right = NULL;
}
else
{
    //删除的节点有两个子节点
    //右子树依附在左子树的最右的一个节点
    for(temp = (*ptr)->left;temp->right != NULL;temp = temp->right)
        continue;

    temp->right = (*ptr)->right;
    temp = (*ptr);
    (*ptr) = (*ptr)->right;
    free(temp);
}

}

用DeleteNode(&(look.child))删不干净,DeleteNode(&look.parent->left);这种的就完全没问题,这是怎么一回事

时间: 2024-08-31 05:06:44

c语言-关于C Primer Plus第5版的二叉树的问题的相关文章

【转】c++.primer.plus.第五版.中文版[下载]

c++.primer.plus.第五版.中文版[下载] 一共有5部分.全部下载完才可解压阅读. c++.primer.plus.第五版.中文版(一) c++.primer.plus.第五版.中文版(二) c++.primer.plus.第五版.中文版(三) c++.primer.plus.第五版.中文版(四) c++.primer.plus.第五版.中文版(五) "在遇到无法解决的问题时,我总会求助于C++ Primer一书."--Bruce Eckel,"编程思想"

(六十二)第四章总结——《C++ Primer Plus 第6版 中文版》

书是<C++ Primer Plus  第6版  中文版> 数组.指针.结构 是C++的3种复合类型.   注:为了方便,类型名用int为主,变量名用a为主.   数组: 包括数组(例如int a[10];)和字符串(例如char a[10];),还有string类(例如string a="abc";),vector类(例如vector<int>a(5)).array类(array<int,3>a)等. 数组名表示数组所在的(第一个元素)内存地址.

求大神解答一下-C++ primer plus 第6版 中文版 第16章复习题的一个问题

问题描述 C++ primer plus 第6版 中文版 第16章复习题的一个问题 奇葩的是课后居然没答案...... 求正规.严谨.简洁的标准答案! 程序清单16.15(在p708页):functor.cpp //functor.cpp--using a functor #include尖括号iostream尖括号 #include尖括号list尖括号 #include尖括号iterator尖括号 #include尖括号algorithm尖括号 template//functor class

《C语言程序设计与实践(第2版)》——1.4 C语言的发展历史、现状与特点

1.4 C语言的发展历史.现状与特点 1.4.1 C语言的发展历史和现状 C语言的发展历史可以追溯到1961年的ALGOL 60,它是C语言的祖先.ALGOL 60是一种面向问题的高级语言,与计算机硬件的距离比较远,不适合用来编写系统软件.1963年,英国剑桥大学推出了CPL(Combined Programming Language).CPL对ALGOL 60进行了改造,在ALGOL 60基础上接近硬件一些,但是规模较大,难以实现.1967年,英国剑桥大学的Martin Richards对CP

《C语言程序设计与实践(第2版)》——导读

前言 C语言程序设计是一门理论与工程实践密切相关的专业基础课程,在计算机学科教学中具有十分重要的地位.大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养.通过本课程的学习,学生应培养良好的编程风格,掌握常见的算法思路,真正提高运用C语言编写程序解决实际问题的综合能力,为后续课程的实践环节打好基础. 目前国内关于C语言的教材较多,有些教材语法知识介绍细致,较适合作为非专业的等级考试类教学用书:有些教材起点较高,内容深奥,不适于初学者.为了帮助广大学生更好地掌

《C语言程序设计与实践(第2版)》——2.2 分支语句

2.2 分支语句 2.2.1 if语句 例2-2中程序的功能是统计C语言程序设计课程期末考试各分数段的人数.按照五级制统计可分成以下几档: 90-100 A 80-89 B 70-79 C 60-69 D 0-59 E 要求输出各分数段的具体人数. 例2-2 用if语句统计各分数段的人数. #include <stdio.h> / 统计各分数段人数/ int main() { int score, i; int grade[5]; for (i = 0; i < 5; i++) grad

《C语言程序设计与实践(第2版)》——3.4 表达式和运算符

3.4 表达式和运算符 C语言的运算符范围很广,具有非常丰富的运算符和表达式运算,为编写程序提供了方便.表达式是由操作数和运算符组成,运算后产生一个确定的值,其中操作数可以是常量.变量.函数和表达式,每个操作数都具有一种数据类型,通过运算得到的结果也具有一种数据类型,结果的数据类型与操作数的数据类型可能相同,也可能不相同.运算符指出了表达式中的操作数如何运算.C语言中共有44种运算符,根据各运算符在表达式中的作用,表达式大致可以分成算术表达式.关系表达式.逻辑表达式.条件表达式.赋值表达式和逗号

《C语言程序设计与实践(第2版)》——1.2 计算机与程序设计

1.2 计算机与程序设计 计算机的功能非常强大,能做非常复杂.人脑难以胜任的许多工作.然而,从电子市场买回CPU.主板.内存.硬盘等硬件并组装好一台计算机后,你却发现这台计算机什么也做不了.究其原因,就是因为该计算机上还没有安装任何计算机程序,即软件.硬件是计算机拥有强大功能的前提条件,但是如果没有"大脑"(也就是计算机程序)去指挥它,它将什么也做不了,所以计算机程序的存在是计算机能够工作.能够按指定要求工作的必要条件.因此,计算机程序(Program,通常简称程序)可以简单理解为人们

Kmplayer2.9.3.1291 Beta 简体中文语言文件+exe 优化和组件增强版 下载_常用工具

KMPlayer The Professional Media Player!  它支持 Winamp 2/5 的输入.常规.DSP.视觉效果.媒体库插件.无须注册表支持直接调用 Directshow 滤镜!FFdshow 的视觉特效系统~超强的 GUI 界面~安装电视卡后可以直接代替原软件直接收看电视~支持播放 DVD/VCD 以及绝大多数电脑的媒体文件(AVI 支持 Xvid/DivX/3vid/H264 OGG/OGM/MKV 容器/AC3/DTS 解码~Monkey Audio 解码~)