首页 > 博客作业04--树

博客作业04--树

一.学习总结(2分)

1.1树结构思维导图

1233822-20180505110021389-289223484.png

1.2 树结构学习体会

树的前中后序递归操作的访问路径都如下图

1233822-20180505110331069-1479032635.png

树的层次遍历的路径则如下图

1233822-20180505111048627-1085517347.png

操作{

进队第一个节点,

while(队不空)

{

访问该节点,

if(BT->lchild!=NULL)进队。

if(BT->rchild!=NULL)进队。

}

}

三序遍历的非递归(先序为例):

操作:{

进栈树的根节点;

while(栈不空){

访问之

if(BT->rchild!=NULL)进栈。

if(BT->lchild!=NULL)进栈。

}

}

前序中序建树过程:

前:ABCEFD

中:BCEFAD

前序的第一个A:说明它是根节点

左前树: BCEF 左中:BCEF

右前树: D 右中:D

重复找左右树。

结果如下图

1233822-20180505113106680-1806845550.png

哈夫曼树

如1357建树:

1233822-20180505113304190-1720663743.png

细心观察会发现其wpl与非叶子节点的和是相等的

数学证明:设 a b c d e 几个节点建立哈夫曼树(假设每一个节点都比后加进来的节点大)

a+b为第一个非根节点 则a+b+c为第二个依次类推

会发现非叶子节点的和是e+2d+3c+4b+4a

而wpl也恰好是这个值

并非偶然这可以从哈夫曼树的结构来考虑因为每递加一层已经建立过的节点就加1比方说哈夫曼树有三层那么最下面一层的和会在第二层次中被加也会在第一层被加也就是被

了两次与wpl构造数的算法完全一致。于是可运用贪心算法快速得到wpl。

树是一种非线性结构

树形结构不但本身很有用,还反映了许多计算过程的抽象结构;

树形结构的结点形成一种层次结构;

递归则是它的重点,但递归这种操作理解起来的难度真的很大,因此要多看看别人的代码来学习。

二.PTA实验作业(4分)

2.1 题目1:修理牧场

1 设计思路(伪代码或流程图)

定义一个队列可以让进队元素按从大到小排列
for(i=0;i

2.代码截图

1233822-20180505161722077-1126735643.png

3.PTA提交列表说明

1233822-20180505161834045-1096867754.png

2.1 题目2:朋友圈

1 设计思路(伪代码或流程图)

//定义三个数组一个是保留每一个每一个数对应的根节点一个保留所有根节点
//最后一个保留每一个根对应的孩子数
初始化树中的每个节点数值为-1
先输入孩子数和朋友圈数n,m
for(int i=0;i

2.代码截图

1233822-20180505163208169-2137600623.png

1233822-20180505163219742-72758106.png

3.PTA提交列表说明

1233822-20180505163235242-681201829.png

2.1 题目3:表达式树

1 设计思路(伪代码或流程图)

//观察表达式树会发现数字字符的左孩子右孩子都是空的用于后面的表达式树的运算
//创建两个栈一个是树节点的保存类型一个是字符保存栈
for(int i=0;str[i];i++){
if(字符是数字)创建树节点并且入栈
else
{
if(字符栈栈顶优先级小于str[i]){
则进栈字符栈
}
else if(字符栈栈顶优先级大于str[i]){
出栈并且从节点栈中拿出两个;
构树并且放回节点栈中
}
else{
直接出栈
}
}
计算表达式
{
if(BT->rchild==NULL&&BT->lchild==NULL)
return BT->data-'0'
else{
a=计算遍历右树
b=计算遍历左树
switch()
{
case '+':return a+b;
case  '-':return a-b
case '*':returna*b
case '/':return a/b
}
}

2.代码截图

1233822-20180505170712442-1134507228.png

1233822-20180505170727787-808403066.png

3.PTA提交列表说明

1233822-20180505170837640-459981389.png

3.3 我的总分:230

1233822-20180505115817630-745885078.png

四. 阅读代码(必做,1分)

5-27 家谱处理 (30分)

#include 
#include
#include
/* 评测结果 时间  结果  得分  题目  编译器     用时(ms)  内存(MB)  用户
2016-08-30 10:31    全部正确    25  5-27    gcc     1   1   569985011
测试点结果 测试点   结果  得分/满分   用时(ms)  内存(MB)
测试点1    答案正确    18/18   1   1
测试点2    答案正确    2/2     1   1
测试点3    答案正确    5/5     1   1
测试点4    答案正确    5/5     1   1
查看代码*/
typedef struct node *Node;
struct node {char Name[11];int space;int  Parant;
};Node Tree;
int n;int Scan(char*);
int Trace(int);
int judgeParent(int,int);//父子
int judgeSibling(int,int);//兄弟
int judgeAncestor(int,int);//祖先
void work();
int Index(char*);int main() {int m;scanf("%d%d",&n,&m);Tree=(Node)malloc(sizeof(struct node)*n);getchar();//清除缓存for(int i=0; i=0; i--) {if(Tree[i].space

这一题我一开始的想法就是先建立一个树家谱关系树,确实建立成功勒,但是后面的各个关系的处理判断我就不会了.

1233822-20180505173732168-897044240.png

这个输入方式就可以忽略没用的信息

然后就是从数组去寻找这两个名字的位置后转换为各个小问题的处理,

这种处理方式真的很容易非常巧妙还有就是它有保留家谱中每个人的信息是用数组处理的

五. 代码Git提交记录截图

1233822-20180505171803486-74488831.png

转载于:https://www.cnblogs.com/m208231833/p/8994142.html

更多相关:

  •         Apache POI是一个开源的利用Java读写Excel,WORD等微软OLE2组件文档的项目。        我的需求是对Excel的数据进行导入或将数据以Excel的形式导出。先上简单的测试代码:package com.xing.studyTest.poi;import java.io.FileInputSt...

  • 要取得[a,b)的随机整数,使用(rand() % (b-a))+ a; 要取得[a,b]的随机整数,使用(rand() % (b-a+1))+ a; 要取得(a,b]的随机整数,使用(rand() % (b-a))+ a + 1; 通用公式:a + rand() % n;其中的a是起始值,n是整数的范围。 要取得a到b之间的...

  • 利用本征图像分解(Intrinsic Image Decomposition)算法,将图像分解为shading(illumination) image 和 reflectance(albedo) image,计算图像的reflectance image。 Reflectance Image 是指在变化的光照条件下能够维持不变的图像部分...

  • 题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入: [1, 2, 3, 2, 2, 2, 5, 4, 2] 输出: 2 限制: 1 <= 数组长度 <= 50000 解题: cl...

  • 题目:二叉搜索树的后序遍历序列 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历结果。如果是则返回 true,否则返回 false。假设输入的数组的任意两个数字都互不相同。 参考以下这颗二叉搜索树:      5     /    2   6   /  1   3示例 1: 输入: [1,6,3,2,5] 输出...

  • 当一个IT组织开始走到需要实施网络边缘的旅程时,他们很快意识到面对的挑战与他们在传统数据中心内所经历的挑战不同。 第一个挑战是空间。与更大的核心或区域数据中心同类产品相比,许多边缘站点的物理尺寸更小,因此,需要仔细计划好,尝试在未为其专门设计的空间中安装硬件。  第二个挑战是运行环境。还必须解决的可能面对的冷热温度变化 ,天气,无...

  • 单向循环链表单链表的一个变形是单向循环链表, 链表的最后一个节点的next域不再为None, 而是指向链表的头节点.单向循环链表如图所示:单向循环链表同样单向循环链表也是要使用python来对它的基本功能进行一个封装. 总体大致的功能如下:is_empty() 判断链表是否为空length() 返回链表的长度travel() 遍历ad...

  • 题目: 二叉搜索树与双向链表 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。 为了让您更好地理解问题,以下面的二叉搜索树为例: 我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一...

  • 题目:删除链表的节点 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点。 返回删除后的链表的头节点。 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val = 5 输出: [4,1,9] 解释: 给定你链表中值为 5 的第二个节点,那么在调用了你的函数之后,该链表应变为...

  • 【从零开始的ROS四轴机械臂控制】(一)- 实际模型制作、Solidworks文件转urdf与rviz仿真 一、模型制作 1.实际模型制作 2.Solidworks模型制作 二、Solidworks文件转urdf 1.sw_urdf_exporter插件 2.添加坐标系和转轴 3.导出urdf文件 三、rivz仿真...

  • L3-010. 是否完全二叉搜索树 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 将一系列给定数字顺序插入一个初始为空的二叉搜索树(定义为左子树键值大,右子树键值小),你需要判断最后的树是否一棵完全二叉树,并且给出其层序遍历的结果。 输入格...

  •  一个用于实现初始化指定个数的完全二叉树,以及两个非递归的深度优先遍历,和广度优先遍历 package fifth;  import java.util.Random;  public class Tool{     public static Random rand= new Random(); }  --------------...