树与二叉树
米娜桑好久不见,国庆期间没有更新博客,属实有点摆烂 今天我们的主题是树与二叉树的转换,以及树的储存方法,遍历方法与二叉树的区别等 首先,我们要明白的是,树可以有多个子节点,而二叉树最多只有两个,所以二叉树是特殊的树 一.树的存储与转换1.父亲表示法(双亲表示法) 使用一个数组来存储每个节点,其中每个节点只包含一个指针(或索引),指向其父节点。这种表示法的缺点是无法快速找到子节点,但优点是节省了存储空间。 1234struct TreeNode { int data; int parentIndex; // 指向父节点在数组中的索引}; 2.孩子链表表示法 使用一个数组来存储每个节点,每个节点包含一个链表,链表中的每个节点指向该节点的子节点。这样,查找子节点的时间较快,但会增加空间开销。 123456789101112// 孩子链表中的节点struct ChildNode { int childIndex; // 子节点的索引(或指针) ChildNode* next; //...
线索化二叉树及其遍历
线索化二叉树以下是实现该结构并进行中序遍历的代码:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113#include <iostream>using namespace std;// 定义线索二叉树节点的结构struct ThreadedNode { int value; // 节点的值 ThreadedNode* left; // 指向左子节点 ThreadedNode* right; // 指向右子节点 bool lThread; ...
二叉树的遍历访问的实现
引入我们从小学二年级开始,就学过二叉树了(bushi) 那么,如何用编程实现二叉树的遍历呢? (这里使用c艹) 1234567struct TreeNode { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}}; 二叉树的每个结点都是如此定义的 遍历方法分为前序,中序,后序三种遍历方法。前序是从根结点开始,访问到最左侧第一个叶子结点后,访问右侧叶子,然后返回上一级(不访问),访问同级右侧结点,然后往下按照先左后右的顺序访问,等左子树访问完毕后,访问右子树。 中序是从左侧第一个叶子结点开始,返回上一级(访问),下一级右侧,返回上上级,右侧最下方左侧结点,然后返回上一级(访问),以此类推。 后序是按从左到右的顺序,左侧第一个叶子结点开始,访问完上一级结点左侧后,去右侧,然后返回上一级。 每种遍历方法又分为递归和非递归两种非递归方法1....
双指针与滑动窗口
题1题目:给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素.元素的顺序可以改变.然后返回数组中与 val 不同的元素的数量. 假设 nums 中不等于 val 的元素数量为 k,要通过此题,你需要执行以下操作: 修改 nums 数组,使得 nums 的前 k 个元素包含所有不等于 val 的元素. 返回 k 的值.nums 中的其他元素和数组大小不重要. 方法一:双指针思路及算法:由于题目要求删除数组中等于 val 的元素,因此输出数组的长度一定小于等于输入数组的长度,我们可以把输出的数组直接写在输入数组上.可以使用双指针:右指针 right 指向当前将要处理的元素,左指针 left 指向下一个将要赋值的位置. 如果右指针指向的元素不等于 val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移; 如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位. 整个过程保持不变的性质是:区间 [0,left) 中的元素都不等于...
Unity(一)
平动和转动123456789101112131415161718192021222324252627public class instance : MonoBehaviour{ public float moveSpeed = 10f; public float turnSpeed = 50f; private void Update()//update是每帧更新的函数 { if(Input.GetKey(KeyCode.UpArrow)) { transform.Translate(Vector3.forward * moveSpeed*Time.deltaTime); } //translate是平移,vector3是一个三维数组,forward代表(0,0,1) //deltatime是两帧之间的时间间隔 //没有使用 Time.deltaTime 的问题 //如果你只是使用...
Github拒绝push
Github 拒绝了你的push你有没有出现以下问题? 1234 ! [remote rejected] HEAD -> main (push declined due to repository rule violations)error: failed to push some refs to 'https://github.com/cmzcc/cmzcc.github.io.git'FATAL Something's wrong. Maybe you can find the solution here: https://hexo.io/docs/troubleshooting.html 今天本人在像往常一样运行hexo d...
c++中关于深拷贝与重载赋值运算符的思考
深拷贝12345678910111213141516171819202122232425262728293031323334353637383940414243class instance{public: int age; int* height;instance(int a,int h){ age = a; cout << a << endl; height=new int(h); cout << *height << endl;}~instance(){ if (height != NULL) { delete height; height = NULL; cout << "已清空" << endl; }}instance(const instance& p){ age = p.age; //height = p.height;编译器默认实现的就是这行代码 //深拷贝如下 height =...