2021-01-29学习总结

上午8:00学习打卡
上午9:00 – 11:00(2h)
刷vj上的题,vj达标,先转战二叉树,二叉树还是只搞定一题。
下午13:00 – 18:00(5h)

问题 C: 二叉树的输入
描述
用二叉树的带虚结点表示的前序遍历序可以唯一的确定一棵二叉树。
格式
输入格式
输入包含多组数据。
每行是一棵二叉树的带虚结点(#)表示的前序遍历序串,长度不超过2000。每个结点为一个字符。
输出格式
对每行输入,输出对应二叉树的中序遍历序(不含虚结点)、后序遍历序(不含虚结点)和层次遍历序(不含虚结点)。
每棵二叉树的输出占一行,中序遍历序、后序遍历序和层次遍历序之间用一个空格隔开.

算是一道小水题,但是我掌握的不是很清楚,就到处找学长和同级的小伙伴问,代码如下,

#include<iostream>
#include<queue>
using namespace std;
char str[2010];
char *STR;
typedef struct BiTNode//结点结构
{char data;//结点数据struct BiTNode *lchild,*rchild;//左右子树指针
} BiTNode,*BiTree;
void PreOrderTraverse(BiTree T)//前序,根左右
{if(T==NULL)return;printf("%c",T->data);//显示结点数据PreOrderTraverse(T->lchild);//先左PreOrderTraverse(T->rchild);//后右
}
void InOrderTraverse(BiTree T)//中序,左根右
{if(T==NULL)return;InOrderTraverse(T->lchild);printf("%c",T->data);InOrderTraverse(T->rchild);
}
void PostOrderTraverse(BiTree T)//后序,左右根
{if(T==NULL)return;PostOrderTraverse(T->lchild);PostOrderTraverse(T->rchild);printf("%c",T->data);
}
void LevelOrderTraverse(BiTree T)
{BiTree q[60];int in=0,out=0;q[in++]=T;while(in>out){if(q[out]){printf("%c",q[out]->data);q[in++]=q[out]->lchild;q[in++]=q[out]->rchild;}out++;}
}
char *CreateBiTree(BiTree &T, char *str)//这个是参考CSDN的,回头自己再琢磨琢磨。
{// 约定#表示空结点if (*str == '#'){T = NULL;return str + 1;}
// 创建结点T = new BiTNode;T->data = *str;
// 继续输入并构造左子树和右子树str = CreateBiTree(T->lchild, str + 1);str = CreateBiTree(T->rchild, str);
// 返回剩余的字符串return str;
}
int main()
{BiTree T;while(~scanf("%s",str)){STR = str;CreateBiTree(T,STR);InOrderTraverse(T);printf(" ");PostOrderTraverse(T);printf(" ");LevelOrderTraverse(T);printf("\n");}
}

问题 B: 二叉树,知中序后序,求先序(递归)
描述
已知二叉树的中序、后序,建树求先序。
格式
输入格式
中序序列
后序序列
输出格式
先序序列

首先
假设结点为 N,左子结点为 L,右子结点为 R。则:
先序遍历:NLR(N 在最前面)
中序遍历:LNR(N 在中间)
后序遍历:LRN(N 在最后面)
所以,后序的最后一个是根,中序里边根左边是左子树,右边是右子树,这样整道题的思路就突然明亮了起来。
然后,就各种错误了。。
首先错在这里,

我输入数据就会变成,美丽的
于是乎请教了师傅,
改为了

然后没有运行结果,在请假同组的同学之后,


然后就搞定了,上AC

#include <iostream>
using namespace std;
void fun1(char *a,char *b,int len)//中序,后序,序列长度
{if(len<=0)return;printf("%c ",b[len-1]);int cnt=0;while(a[cnt]!=b[len-1])cnt++;//后序最后一个字符是根,中序根左边是左子树,右边是右子树,统计根左边的字符数。fun1(a,b,cnt);//左子树fun1(a+cnt+1,b+cnt,len-cnt-1);//右子树
}
char a[10000] = {0};
int main()
{int i = 0;while(cin>>a+i){i++;}fun1(a,a+i/2,i/2);return 0;
}

问题 A: 后序遍历二叉树
描述
给定一颗二叉树,要求输出二叉树的深度以及后序遍历二叉树得到的序列。本题假设二叉树的结点数不超过1000
格式
输入格式
输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个…,如果某个结点不存在以0代替,当前节点不存在时下一层子节点不会给出(连0也不会有))。
输出格式
输出每棵二叉树的深度以及后序遍历二叉树得到的序列。

首先,求二叉树的深度,在《大话数据结构》的P170,有一行公式。emmm我直接上图

现在是23:09的许李彬,下午没搞定这题所以准备晚上写,刚刚搞定这题,这题我这个公式死活套不了,因为阳阳睡觉去了,问了别的学长,这题求深度可以这么求
不多说了,上AC代码

#include<iostream>
#include<cstring>
#include<queue>
#include<math.h>
using namespace std;
int s[3010]= {0},i,j,flag;
typedef struct BiTNode
{int data;struct BiTNode *left,*right;
} BiTNode,*BiTree;
void PostOrderTraverse(BiTNode *T)
{if(T){PostOrderTraverse(T->left);PostOrderTraverse(T->right);cout<<" "<<T->data;}
}
int TreeDepth(BiTree T)
{int rdepth,ldepth;if(T==NULL)return 0;ldepth=TreeDepth(T->left);rdepth=TreeDepth(T->right);return ldepth>rdepth?(ldepth+1):(rdepth+1);
}
BiTree CreateBiTree()
{queue<BiTree>q;if(s[i]=='0'){i++;return NULL;}BiTree head=(BiTree)malloc(sizeof(BiTNode));head->data=s[i++];q.push(head);while(!q.empty()){BiTree T=q.front();q.pop();if(s[i]==0){i++;T->left=NULL;}else{T->left=(BiTree)malloc(sizeof(BiTNode));T->left->data=s[i++];q.push(T->left);flag++;}if(s[i]==0){i++;T->right=NULL;}else{T->right=(BiTree)malloc(sizeof(BiTNode));T->right->data=s[i++];q.push(T->right);flag++;}}return head;
}
int main()
{int T,a,n;cin>>T;BiTree Tree;while(T--){i=j=flag=0;while(cin>>n&&n!=-1){s[j++]=n;}Tree=CreateBiTree();cout<<TreeDepth(Tree);PostOrderTraverse(Tree);cout<<endl;memset(s,0,sizeof(s));}
}

晚上19:00 – 23:00(4h)
背单词,二叉树达标。

总计11h

2021-01-29学习总结相关推荐

  1. 2021.01.29小型计算器

    2021.01.29小型计算器 题目描述 模拟程序型计算器,依次输入指令,可能包含的指令有: 数字:'NUM X',X为一个只包含大写字母和数字的字符串,表示一个当前进制的数 运算指令:'ADD',' ...

  2. 2021.01.29 Visual QA论文阅读

    目录 [2014][NIPS] A Multi-World Approach to Question Answering about Real-World Scenes based on Uncert ...

  3. 2021/01/29思维导图(3)

  4. 2021第一学期学习笔记01

    2021第一学期学习笔记01 摘要 一.知识点 1.1 追溯 1.2 区块链 二.项目报告 三.本地服务器 四.环境配置 4.1 JDK 展望 摘要 本周的学习情况主要是进行基础理论的学习,查找有关于 ...

  5. 史上最详细微信小程序授权登录与后端SprIngBoot交互操作说明,附源代码,有疑惑大家可以直接留言,蟹蟹 2021.11.29完善更新小程序代码,

    2021.11.29 更新文章 你好,我是博主宁在春,一起学习吧!!! 写这篇文章的原因,主要是因为最近在写毕业设计,用到了小程序,这中间曲曲折折,一言难尽啊.毕业设计真的让人麻脑阔

  6. cs224w(图机器学习)2021冬季课程学习笔记8 Colab 2

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 VX号"PolarisRisingWar"可直接搜索添加作者好友讨论. 更新日志: 20 ...

  7. 嬴群的Python程序设计基础学期总结 2021.01.04

    Python程序设计基础学期总结 ## 时光像水中的倒影,一晃大一上学期就过去了.昨日那埋怨时间太慢的情愫似乎还游离在脑际,而今大一下学期生活正向我们走来,蓦然回首,感慨颇多.刚迈入大学的时候对一切似 ...

  8. cs224w(图机器学习)2021冬季课程学习笔记2: Traditional Methods for ML on Graphs

    诸神缄默不语-个人CSDN博文目录 cs224w(图机器学习)2021冬季课程学习笔记集合 文章目录 1. 章节前言 2. Traditional Feature-based Methods: Nod ...

  9. 2021/01/03 新标日第1课

    2021/01/03(2021/01/04补) 今天完成了新标日第一课的学习.回顾自己从五十音图,到浊音半浊音拗音合拗音拨音促音长音,终于完成了入门.继续努力,或许以后失业了可以做日语翻译. 去年秋夜 ...

  10. 一次挖矿入侵处理记录(2021.01.27)

    https://github.com/bg6cq/ITTS/blob/master/security/mine/README.md 转自上面链接,也是我的亲身经历,供大家学习.网络安全大家引以为戒.爱 ...

最新文章

  1. LeetCode题组:第836题-矩形叠加
  2. 基于linux的java学习,Java学习---Linux总结
  3. 服务器虚拟交换机到网卡不通,浅析虚拟化环境网卡绑定模式
  4. 关于$'\r': command not found错误的一点体会
  5. python 的datetime模块使用
  6. IPC 中 LPC、RPC 的区别和联系
  7. 是什么决定了我们以何种方式赚钱?
  8. 文件上传表单 上传文件的细节 文件上传下载和数据库结合
  9. 苹果终于迷途知返?还是指纹识别更香...
  10. 2021年中国地下采矿机械市场趋势报告、技术动态创新及2027年市场预测
  11. 实战自制Linux操作系统
  12. ASP.NET中的ExecuteNonQuery()方法的用法
  13. sprintf与swprintf
  14. cmd xcopy 拷贝文件夹_cmd xcopy进行远程复制
  15. MongoDB实战-分片概念和原理
  16. 微信公众号商城前景分析
  17. 化妆品店5大智能玩法,引领美容美妆新零售趋势
  18. js的json php无法json_decode,PHP中遇到BOM、 编码导致json_decode函数无法解析问题
  19. 如何在电脑上运行模拟器
  20. 胡适:非个人主义的新生活

热门文章

  1. 自然语言处理顶会ACL 2020会议核心要点分享
  2. STM32 关于VDD、VSS、VDDA、VSSA、VREF+等标识解释
  3. 2022安全员-B证考试练习题及模拟考试
  4. (完本)成绩处理之大结局~
  5. 我推出了微博寻人在线系统
  6. 移植python3.6.2至FCU1101笔记(zlib、sqlite3)
  7. python浮点数计算出现无限小数
  8. 二手机器人进口报关_国外二手机器人进口报关代理
  9. ThinkPHP5微信扫码支付
  10. 正在颠覆人类创作的“生成式技术”到底是什么?