删除子树实验报告总结_进程管理实验报告总结

其他工作总结 时间:2020-02-28 12:51:32 收藏本文下载本文
【www.daodoc.com - 其他工作总结】

删除子树实验报告总结由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“进程管理实验报告总结”。

一 实验目的和要求

理解二叉树的基本概念,熟练使用多种表示法构造二叉树,掌握采用二叉链表存储结构实现二叉树的构造、遍历、插入、删除等操作算法;理解线索二叉树的作用,掌握获得线索二叉树节点在指定遍历次序下的前驱或后继结点的方法;理解哈弗曼编码和哈弗曼树的作用,掌握由指定文本求得哈弗曼编码的方法。

理解树的基本概念,熟悉树的多种存储结构,掌握采用孩子兄弟链表存储结构实现树的遍历、插入、删除等操作算法。

通过研究树和二叉树,深刻理解链式存储结构用于表达非线性结构的作用,掌握采用递归算法实现递归数据结构基本操作的设计方法。二 题目及题意分析

题目:删除以P的第I个孩子为根的子树。

分析:用孩子兄弟链表构造一棵树,将树转化成二叉树,由根的sibling链将若干棵树连接成一棵二叉树,构造removechild(TreeNode*p,int i)函数实现操作,若p指针为空或者是i超出范围怎溢出错,否则,当删除第一个孩子为根的子树时,p的孩子指针指向原孩子指针的兄弟结点删除p的原孩子子树。若删除的为中间或最后子树,用循环语句找到要删除的子树,并使用指针temp记住该子树的前一个结点,将temp的兄弟指针指向要删除子树的兄弟结点,删除子树。三 设计方案和功能说明

源程序如下: Treenode.h

template cla TreeNode

结点类 { public:

T data;

TreeNode*child,* sibling;

TreeNode(T data)

{

this->data=data;

this->child=this->sibling=NULL;

} };Tree.h #include #include“TreeNode.h” template cla Tree { public:

TreeNode*root;

Tree();

TreeNode*insertchild(TreeNode*p,T value);

friend ostream&operator&tree);

输出流

void removechild(TreeNode*p,int i);

删除子树函数

private:

void preOrder(TreeNode*p,int i);

void destroy(TreeNode*p);

释放

};template Tree::Tree(){ root=NULL;} template TreeNode*Tree::insertchild(TreeNode*p,T value)

{ TreeNode*q=NULL;if(p!=NULL){

q=new TreeNode(value);

if(p->child==NULL)

p->child=q;

else

{

p=p->child;

while(p->sibling!=NULL)

p=p->sibling;

p->sibling=q;

} }

return q;} template ostream&operator&tree){ tree.preOrder(tree.root,0);return out;} template void Tree::preOrder(TreeNode*p,int i)

输出 { if(p!=NULL)

插入结点

{

for(int j=0;j

cout

coutdata

preOrder(p->child,i+1);

preOrder(p->sibling,i);

}

} template void Tree::destroy(TreeNode*p){ if(p!=NULL){

destroy(p->child);

destroy(p->sibling);

delete p;} } template

void Tree::removechild(TreeNode*p,int i)

{ if(p==NULL||i==0)

cout

溢出错

else { TreeNode*temp=p;

头子树删除

if(i==1)

{

temp=p->child;

p->child=p->child->sibling;

destroy(temp->child);

delete temp;

}

else

{

p=p->child;

for(int j=1;j

{

temp=p;

记住前一个结点

p=p->sibling;

}

destroy(p->child);

temp->sibling=temp->sibling->sibling;

删除子树

链接

delete p;

}

} } 主函数

#include“Tree.h”

int main(){ Tree tree;TreeNode *q=NULL;tree.root=new TreeNode(“中国”);

tree.insertchild(tree.root,“北京”);tree.insertchild(tree.root,“上海”);TreeNode *js=tree.insertchild(tree.root,“江苏省”);tree.insertchild(js,“南京市”);tree.insertchild(js,“苏州市”);TreeNode*zj=tree.insertchild(tree.root,“浙江省”);tree.insertchild(zj,“杭州市”);tree.insertchild(zj,“宁波市”);

TreeNode *hn=tree.insertchild(tree.root,“河南省”);tree.insertchild(hn,“郑州市”);tree.insertchild(hn,“新乡市”);

cout

调用

cout

} 四 运行结果及分析

1删除第一个子树 中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

构造一棵树

新乡市

中国

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市 Pre any key to continue 2 删除中间子树 中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市 中国

北京

上海

江苏省

南京市

苏州市

河南省

郑州市

新乡市 Pre any key to continue 3 p为空时 中国

北京

上海

江苏省

南京市

苏州市

浙江省

杭州市

宁波市

河南省

郑州市

新乡市 参数错误

Pre any key to continue 结果分析:构造一棵树,调用函数removechild,给定不同的指针及i值运行结果正确,删除成功,考虑p为空及i超出范围,溢出错。

五 实验总结

通过实验理解了树及二叉树的存储结构熟悉掌握了孩子兄弟链表的存储结构实现,以及遍历、查找、删除等操作,深刻理解实现链式存储结构表达非线性的树存储结构。

删除子树实验报告总结

一 实验目的和要求 理解二叉树的基本概念,熟练使用多种表示法构造二叉树,掌握采用二叉链表存储结构实现二叉树的构造、遍历、插入、删除等操作算法;理解线索二叉树的作用,掌握获......

实验报告总结

刀豆文库小编为你整合推荐5篇实验报告总结,也许这些就是您需要的文章,但愿刀豆文库能带给您一些学习、工作上的帮助。......

实验报告总结

实验报告总结在现在社会,接触并使用报告的人越来越多,报告具有双向沟通性的特点。我们应当如何写报告呢?以下是小编整理的实验报告总结,供大家参考借鉴,希望可以帮助到有需要的朋......

实验报告总结

实验报告总结工作总结就是把一个时间段的工作进行一次全面系统的总检查、总评价、总分析、总研究,并分析成绩的不足,从而得出引以为戒的经验。下面是小编为你整理了实验报告总......

实验报告总结

实验报告总结(整理12篇)由网友“浑元无形大师姐”投稿提供,以下是小编精心整理的实验报告总结,供大家阅读参考。篇1: 实验报告总结 透过一个学期对《计算机网络实用技术》这门课......

下载删除子树实验报告总结word格式文档
下载删除子树实验报告总结.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

热门文章
点击下载本文