7-30
树和二叉树
非线性结构:至少存在一个数据元素可以有两个或者两个以上的前驱或后继元素。
树形结构属于非线性结构,是以分支关系定义的一种层次结构。树形结构中的一个元素为一个结点,结点之间的关系为分支,树中一个结点包含了一个数据元素以及若干指向其子树的分支
树
当结点n=0时称为空树
从逻辑上看:
- 任何非空树中有且只有一个结点没有前驱结点,就是树的根结点
- 除了根节点外,其余所有结点有且只有一个直接前驱结点
- 包括根结点在内,每个结点可以有多个直接后继结点
- 树形结构具有递归特征
树形结构中的数据元素之间的关系桐城市一对多或者多对一
树的逻辑表示方法
- 树形表示
- 文氏图表示
- 凹入表示
- 嵌套括号表示
基本术语
1.结点的度
结点拥有的子树数目
2.树的度
树种各结点度的最大值
3.叶子结点
度为0的结点称为叶子结点或者终端结点。叶结点没有子孙结点
4.分支结点(非终端结点)
度不为0的结点,除了根结点之外的分支结点称为内部结点
5.结点的层次
从根结点所在的层开始,根节点为第1层,根节点的孩子结点在第2层
6.树的深度(高度)
树中结点的最大层次数
7.有序树
8.森林
m棵(m≥0)树的集合。对于树种每个分支结点来说,其子树的集合就是一个森林
性质
非空树的结点总数等于树中所有结点的度之和加一
度为k的非空树的第i层最多有\(k^(i-1)\)个结点
深度为h的k叉树最多有\frac{$k^h-1$}{k-1}个结点( $\sum_1^h k^(i-1) $ )
具有n个结点的k叉树的最小深度为$\log_k (n(k-1)+1)$
//为啥就弄不出数学公式呢…
guess_num
wirteup:
1 | from pwn import * |
这题遇到了几个之前没了解过的地方:
- rand、srand()、seed:https://blog.csdn.net/weixin_33962621/article/details/85825271
- python中调用动态链接库ctypes — Python 的外部函数库 — Python 3.7.8 文档
- sendline()只能传字符和字符串,所以循环里a赋值的时候要转换srt(),不然会报错“‘int’ object has no attribute ‘encode’”
- linux下运行.py的方法:
python 文件名.py
- linux下编译c的方法(虽然没有用上):https://blog.csdn.net/weixin_44895651/article/details/89309790
参考:https://www.b1ndsec.cn/?p=319
写完之后看了别人的题解,发现可以不用ctypes,也应证了第3条
Hello,CTF
放到ida里看伪代码
其中这处能看出是将输入的内容转换为16进制的数字
再与“437…56e"那串数字进行对比,所以只要把“437…56e"转换回去就行了
1 | a=bytes.fromhex("437261636b4d654a757374466f7246756e") |
python-trade
这个名字真是…
下载了一个.pyc文件,放到在线反编译的网站上看看
大概是把输入的内容的每一位经过一个变换,最后再转换为base64编码,跟”XlNkVmtUI1MgXWBZXCFeKY+AaXNt“进行对比
所以就可以直接开始写了
1 | import base64 |
i-16那行:python3遇到的"ord() expected string of length 1, but int found"问题
其中异或(^)进行逆运算就只需要再异或一次
异或的逆运算是同或