当前位置: 首页 > news >正文

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录

  • 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题
    • 一、交换二叉树每个结点的左右孩子
      • Swap 函数(先序遍历):
      • Swap 函数(中序遍历)××× 不可行:
      • Swap 函数(后序遍历):
    • 二、非递归算法求森林中有几棵树
      • 树的二叉链表(孩子-兄弟)存储表示法
    • 三、判断二叉树是否为完全二叉树
    • 四、求二叉树的最小深度 以及 二叉树树高

  1. 树与二叉树知识点文章: 【数据结构】树与二叉树(递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法)
  2. 二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)
  3. 树与森林知识点文章: 【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)
  4. 树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题

一、交换二叉树每个结点的左右孩子

以上代码实现了交换二叉树每个节点的左右孩子的功能,分别使用了先序、中序和后序遍历的方式。

遍历二叉树算法的变式:

  1. Swap 函数(先序遍历):

    • 从根节点开始,先交换当前节点的左右孩子。
    • 然后递归地对左子树和右子树执行相同的操作。
  2. Swap2 函数(中序遍历):

    • 与先序遍历不同,中序遍历中需要先对左子树进行操作,然后交换当前节点的左右孩子,最后对右子树进行操作。
    • 但是这个实现方式是错误的,因为在交换左子树之后,对右子树进行操作时,右子树的结构已经发生了变化,导致结果错误。
  3. Swap3 函数(后序遍历):

    • 与先序遍历类似,但是是在遍历完左右子树之后再交换当前节点的左右孩子。
    • 这样可以保证在交换左右孩子时,左右子树的结构不会被改变。

通过上述分析,正确的交换方式是采用先序或后序遍历,中序遍历方式不适合这个场景。

Swap 函数(先序遍历):

//前序
void Swap(BiTree& T){//(先序遍历) if(T){//根节点 if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}Swap(T->lchild);Swap(T->rchild);}
}

Swap 函数(中序遍历)××× 不可行:

//中序的不行 
void Swap2(BiTree& T){//(中序遍历) if(T){//根节点 Swap2(T->lchild);if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}Swap2(T->rchild);}
}

Swap 函数(后序遍历):

//后序
void Swap3(BiTree& T){//(后序遍历) if(T){//根节点 Swap3(T->lchild);Swap3(T->rchild);if(T->lchild||T->rchild){BiTree p;p= T->lchild;T->lchild = T->rchild;T->rchild = p;}}}

综上可行的只有先序和后序这两种方法:

//交换二叉树每个结点的左右孩子
//先序
void XXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//先序if(!T->lchild&&!T->rchild) return;p=T->lchild;T->lchild=T->rchild;T->rchild=p;XXSwap_LandRchild(T->lchild);XXSwap_LandRchild(T->rchild);}
}
//后序
void HXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//后序if(!T->lchild&&!T->rchild) return;HXSwap_LandRchild(T->lchild);HXSwap_LandRchild(T->rchild);p=T->lchild;T->lchild=T->rchild;T->rchild=p;}
}

完整代码示例:

//设二叉树采用二叉链表存储,设计递归算法实现二叉树中所有结点的左右孩子交换。
#include<iostream>
using namespace std;//二叉链表
typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (BiTNode*)malloc(sizeof(BiTNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}void XXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//先序if(!T->lchild&&!T->rchild) return;p=T->lchild;T->lchild=T->rchild;T->rchild=p;XXSwap_LandRchild(T->lchild);XXSwap_LandRchild(T->rchild);}
}void HXSwap_LandRchild(BiTree &T){BiTree p;if(T==NULL) return;else{//后序if(!T->lchild&&!T->rchild) return;HXSwap_LandRchild(T->lchild);HXSwap_LandRchild(T->rchild);p=T->lchild;T->lchild=T->rchild;T->rchild=p;}
}void XXPrintTree(BiTree T){if(T==NULL) return;else{cout<<T->data<<" ";XXPrintTree(T->lchild);XXPrintTree(T->rchild);}
}int main()
{BiTree T;CreateBiTree(T);XXPrintTree(T);cout<<endl;XXSwap_LandRchild(T);XXPrintTree(T);cout<<endl;HXSwap_LandRchild(T);XXPrintTree(T);cout<<endl;return 0;
}

二、非递归算法求森林中有几棵树

树的二叉链表(孩子-兄弟)存储表示法

[fc,data,nb]
在这里插入图片描述

typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;

树中每个结点三部分:
数据域(data),长子指针域(fc),
右邻兄弟指针域(nb)

树和二叉树的转换
• 树以孩子兄弟表示法存,相当于将树转换成二叉树,但此二叉树根结点无右子树
• 好处:借助二叉树的操作实现树的操作

森林与二叉树的转换

⮚ 树采用二叉链表(孩子-兄弟)存储表示法,转换成二叉树
⮚ 森林由多棵树组成: F = ( T 1 , T 2 , … , T n ) F = ( T1, T2, …, Tn ) F=(T1,T2,,Tn); 将其每棵树转换成二叉树 B T 1 , B T 2 , … , B T n BT₁, BT₂, …, BTn BT1,BT2,,BTn;
⮚ 每棵二叉树BT的根的右子树皆为空树,从BTn开始依次将其根结点链为前一棵二叉树的根的右孩子
⮚ 将森林转换成一棵二叉树,森林的操作可借助二叉树的操作完成

森林和二叉树的转换
• 森林以孩子兄弟表示法存,相当于将森林转换成二叉树
• 好处:借助二叉树的操作实现森林的操作

因此只需要一直向右下数结点的个数就行

typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;//非递归算法求森林中有几棵树。
int CountForestTrees(CSTree F){CSTree p=F;int num=1;while(p){p=p->nb;//右子树num++;}return num;
}

完整代码示例:

//设森林采用根节点为T的二叉链表存储,设计非递归算法求森林中有几棵树。
#include<iostream>
using namespace std;typedef struct CSNode{int data;struct CSNode *fc, *nb;
}CSNode, *CSTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(CSTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (CSNode*)malloc(sizeof(CSNode));T->data = ch;      // 生成根结点CreateBiTree(T->fc); // 构造左子树CreateBiTree(T->nb); // 构造右子树}
}//非递归算法求森林中有几棵树。
int CountForestTrees(CSTree F){CSTree p=F;int num=1;while(p){p=p->nb;//右子树num++;}return num;
}int main()
{CSTree T;CreateBiTree(T);cout<<"森林一共有"<<CountForestTrees(T)<<"棵树"<<endl;return 0;
}

三、判断二叉树是否为完全二叉树

判断二叉树是否为完全二叉树的函数:

//完全二叉树的性质
bool check(BiTree T){if((T->lchild && T->rchild)||(!T->lchild && !T->rchild))return true;return false;
}       //判断是否的完全二叉树
bool is_Complete_Binarytree(BiTree T){BiTree p=T;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}}return true;
}

(带main函数)题解代码示例:

//给定一个二叉树,找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#include<iostream>
using namespace std;//判断二叉树是否为完全二叉树//结点定义入下:
//二叉链表
typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;
} BiTNode, *BiTree;//若用到队列,请用循环队列,并请实现队列的相关操作以供调用。#define MAXQSIZE 100typedef struct {BiTree *base;int front,rear;
} SqQueue; //定义循环队列//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (BiTNode*)malloc(sizeof(BiTNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}
//队列的初始化
void InitQueue(SqQueue &Q){Q.base = (BiTree *)malloc(MAXQSIZE*sizeof(BiTree));Q.front = Q.rear = 0;//队列初始化
}//队空
bool is_QueueEmpty(SqQueue Q){if(Q.rear==Q.front) return true;return false;
}//队满
bool is_QueueMAX(SqQueue Q){if((Q.rear+1)%MAXQSIZE == Q.front) return true;return false;
}//入队
void EnQueue(SqQueue &Q,BiTree e){if(!is_QueueMAX(Q)){Q.base[Q.rear]=e;Q.rear = (Q.rear + 1) % MAXQSIZE;}else{cout<<"ERROR!!! 队列已满"<<endl;}
}
//出队
void DeQueue(SqQueue &Q,BiTree &e){if(!is_QueueEmpty(Q)){e = Q.base[Q.front];Q.front = (Q.front + 1) % MAXQSIZE;}else{cout<<"ERROR!!! 队列为空"<<endl;}
}//完全二叉树的性质
bool check(BiTree T){if((T->lchild && T->rchild)||(!T->lchild && !T->rchild))return true;return false;
}       //判断是否的完全二叉树
bool is_Complete_Binarytree(BiTree T){BiTree p=T;SqQueue Q;if(!T) return true;//空树也是完全二叉树InitQueue(Q);EnQueue(Q,p);while(!is_QueueEmpty(Q)){DeQueue(Q,p);if(!check(p)) return false;else{if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}}return true;
}//层次遍历算法 
void LevelOrderTraverse(BiTree T)
{	BiTree p = T;SqQueue Q;if(!T) return;	InitQueue(Q); EnQueue(Q,p);while (!is_QueueEmpty(Q)){	DeQueue(Q,p);printf("%c ", p->data);if(p->lchild) EnQueue(Q,p->lchild);if(p->rchild) EnQueue(Q,p->rchild);}
}int main(){BiTree T;//例如输入:ABC##DE##F### 来创建二叉树 CreateBiTree(T);LevelOrderTraverse(T);cout<<endl;if(is_Complete_Binarytree(T)){cout<<"是完全二叉树"<<endl;}else{cout<<"不是完全二叉树"<<endl;}return 0; 
} 

四、求二叉树的最小深度 以及 二叉树树高

给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

求二叉树的最小深度的函数:

//直接就是将求树高的程序进行修改,将找左右子树最大树高 改为求左右子树 最小树高
//求二叉树的最小深度
int Get_minHeigt(BiTree T){//二叉树的最小深度if(T==NULL) return 0;else{int Left_Height = Get_minHeigt(T->lchild);int Right_Height = Get_minHeigt(T->rchild);int Tree_minHeight = 1+(Left_Height < Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}

(带main函数)题解代码示例:

//给定一个二叉树,找出其最小深度。
//最小深度是从根节点到最近叶子节点的最短路径上的节点数量。#include<iostream>
using namespace std;typedef struct TreeNode{int data;//数据域TreeNode *rchild;//右孩子指针TreeNode *lchild;//左孩子指针
}TreeNode, *BiTree;//二叉树的建立的算法(按先序遍历序列建立)
void CreateBiTree(BiTree &T) {char ch; scanf("%c",&ch);if (ch=='#') T = NULL;else {T = (TreeNode*)malloc(sizeof(TreeNode));T->data = ch;      // 生成根结点CreateBiTree(T->lchild); // 构造左子树CreateBiTree(T->rchild); // 构造右子树}
}//求树高 
int Get_Height(BiTree node){//递归 求树高 if(node==NULL) return 0;else{int Left_Height = Get_Height(node->lchild);int Right_Height = Get_Height(node->rchild);int Tree_Height = 1 + (Left_Height > Right_Height?Left_Height:Right_Height);//计算树高return Tree_Height;}}
//求二叉树的最小深度
int Get_minHeigt(BiTree T){//二叉树的最小深度if(T==NULL) return 0;else{int Left_Height = Get_minHeigt(T->lchild);int Right_Height = Get_minHeigt(T->rchild);int Tree_minHeight = 1+(Left_Height < Right_Height?Left_Height:Right_Height);//取最短路径return Tree_minHeight;}}int main(){BiTree T;//例如输入:ABC##DE##F### 来创建二叉树 CreateBiTree(T);cout<<"树高为:" ;cout<<Get_Height(T)<<endl;cout<<"根节点到叶节点的最短路径上的节点数量为:";cout<<Get_minHeigt(T)<<endl;return 0; 
} 

感谢阅读!!!

  1. 树与二叉树知识点文章: 【数据结构】树与二叉树(递归法先序、中序、后序、层次遍历二叉树、二叉树的建立以及求树高的方法)
  2. 二叉树遍历算法的应用: 【数据结构】树与二叉树遍历算法的应用(求叶子节点个数、求树高、复制二叉树、创建二叉树、二叉树存放表达式、交换二叉树每个结点的左右孩子)
  3. 树与森林知识点文章: 【数据结构】树与森林(树的存储结构、森林与二叉树的转化、树与森林的遍历)
  4. 树与二叉树、树与森林部分习题: 【数据结构】树与二叉树、树与森林部分习题与算法设计例题

相关文章:

【数据结构】树与二叉树、树与森林部分习题以及算法设计例题 2

目录 【数据结构】树与二叉树、树与森林部分习题以及算法设计例题一、交换二叉树每个结点的左右孩子Swap 函数&#xff08;先序遍历&#xff09;&#xff1a;Swap 函数&#xff08;中序遍历&#xff09; 不可行&#xff1a;Swap 函数&#xff08;后序遍历&#xff09;&#xff…...

Cesium之home键开关及相机位置设置

显隐控制 设置代码中的homeButton var TDT_IMG_C "https://{s}.tianditu.gov.cn/img_c/wmts?servicewmts&requestGetTile&version1.0.0" "&LAYERimg&tileMatrixSetc&TileMatrix{TileMatrix}&TileRow{TileRow}&TileCol{TileCol}…...

FreeRTOS_day1

1.总结keil5下载代码和编译代码需要注意的事项 下载代码前要对仿真进行设置 勾选后代码会立刻执行 勾选后会导致代码不能执行 写代码的时候要写在对应的begin和end之间&#xff0c;否则会被覆盖 2.总结STM32Cubemx的使用方法和需要注意的事项 ①打开软件&#xff0c;新建工程…...

Nginx日志格式化和追踪

背景 Nginx是一款功能强大的Web服务器&#xff0c;对于网络环境中的日志记录和配置至关重要。定制化Nginx日志格式可以帮助管理员更好地监控服务器性能、分析用户行为并做出相应优化。在本文中&#xff0c;我们将深入探讨Nginx日志格式的高级定制化策略&#xff0c;包括理解基…...

华为交换机配置telnet SSH登录步骤

这次项目中的交换机是华为 S5735-L24T4X 需要配置telnet和 SSH登录 在平时项目中发现&#xff0c;华为不同型号&#xff0c;不同版本的配置命令也是不同&#xff0c;&#xff08;这不是脑子有问题吗&#xff1f; 干啥搞成不一样的&#xff09; 本次型号&#xff1a;S5735-L2…...

市面上加密混淆软件的比较和推荐

引言 市面上有许多加密混淆软件可供开发者使用&#xff0c;但哪些软件是最好用的&#xff1f;哪些软件受到开发者的喜爱&#xff1f;本文将根据一次在CSDN上的投票结果&#xff0c;为大家介绍几款在程序员中普及度较高的加密软件。以下是投票结果&#xff0c;希望能对大家的选择…...

最新AI创作系统ChatGPT网站源码AI绘画,GPTs,AI换脸支持,GPT联网提问、DALL-E3文生图

一、前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持GPT…...

电视盒子哪个好?2024口碑网络电视盒子排行榜

多年来电视盒子始终占据重要地位&#xff0c;功能上并没有受到影响。在这么多品牌中哪些电视盒子的评价是最好的呢&#xff1f;小编根据各大电商平台的用户评价情况整理了口碑最好的网络电视盒子排行榜&#xff0c;跟着小编一起看看市面上的电视盒子哪个好吧。 TOP 1&#xff1…...

CookieSession

目录 什么是会话 一.Cookie 1.Cookie介绍 2.Cookie的作用 3.Cookie的基本使用 4.Cookie生命周期 5.Cookie有效路径 6.注意事项 二.Session 1.Session基本原理 2 Session的作用 3.Session的基本使用 4.Session底层实现机制 5.Session生命周期 什么是会话 Cookie和S…...

Nginx服务 重写功能与反向代理

六、重写功能 rewrite Nginx服务器利用 ngx_http_rewrite_module 模块解析和处理rewrite请求&#xff0c;此功能依靠 PCRE(perl compatible regular expression)&#xff0c;因此编译之前要安装PCRE库&#xff0c;rewrite是nginx服务器的重要功能之一&#xff0c;用于实现URL的…...

Midjourney教程(完整版)-看这篇就够了

Midjourney使用指南 - 订阅计划费用比较 Midjourney 具有三个订阅版本。按月或全年支付可享受 20% 的折扣。每个订阅计划都包括访问 Midjourney 图库、官方 Discord、一般商业使用条款等。 如何订阅 使用该/subscribe命令生成指向订阅页面的个人链接。 或者&#xff0c;转到Mi…...

服务器上部署GPU版的milvus向量数据库

1、安装docker compose 我们可以从 Github 上下载它的二进制包来使用&#xff0c;最新发行的版本地址&#xff1a; https://github.com/docker/compose/releases sudo curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)…...

【配置】Docker安装可道云网盘

环境 一台云服务器&#xff0c;centos8&#xff0c;必须安装docker Docker安装 1、卸载旧版 yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine2、需要的安装包 yum ins…...

复盘中得道,技术人的自由之路

从今天开始&#xff0c;后面会推出一个系列&#xff0c;也就是「复盘中得道&#xff0c;技术人的自由之路」。 如果再给我一次机会&#xff0c;我会这样规划我的成长路线&#xff0c;实现职业自由、财富自由、身心自由。 如果你站在童年的位置瞻望未来&#xff0c;你会说你前…...

Nginx配置大全【六大使用场景、七大负载均衡策略、四大负载健康检查】

目录 基础配置信息应用场景一&#xff1a;配置web服务器应用场景二&#xff1a;反向代理服务器应用场景三&#xff1a;URL重定向应用场景四&#xff1a;防盗链应用场景五&#xff1a;根据设备类型重定向/代理/访问 不同域名/资源应用场景六&#xff1a;&#xff01;负载均衡服务…...

GDPU Java 天码行空8

文章目录 &#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实验内容和步骤1、LinkedList 实现队列&#x1f496; MyQueueDemo.java&#x1f496; 运行结果&#xff1a; 2、集合的嵌套遍历&#x1f496; StudentDemo.java&#x1f496; 运行结果&#xff1a; 3、类…...

《前端面试题》- JS基础 - 伪数组

第一次听说伪数组这个概念&#xff0c;听到的时候还以为是说CSS的伪类呢&#xff0c;网上一查&#xff0c;这东西原来还是个很常见的家伙。 何为伪数组 伪数组有两个特点&#xff1a; 具有length属性&#xff0c;其他属性&#xff08;索引&#xff09;为非负整数但是却不具备…...

TypeScript 基础语法

文章目录 1. 类型注解2. 接口&#xff08;Interfaces&#xff09;3. 类&#xff08;Classes&#xff09;4. 泛型&#xff08;Generics&#xff09;5. 枚举&#xff08;Enums&#xff09;6. 高级类型7. 模块8. 装饰器&#xff08;Decorators&#xff09;9. 映射类型&#xff08;…...

服务器数据恢复—V7000存储raid5数据恢复案例

服务器数据恢复环境&#xff1a; P740AIXSybaseV7000存储阵列柜&#xff0c;阵列柜上有12块SAS机械硬盘&#xff08;包括1块热备盘&#xff09;。 服务器故障&#xff1a; 管理员在日常巡检过程中发现阵列柜中有一块磁盘发生故障&#xff0c;于是更换磁盘并同步数据&#xff0…...

扫雷 【搜索,哈希】

9.扫雷 - 蓝桥云课 (lanqiao.cn) #include<bits/stdc.h> using namespace std; #define int long long const int N1e5100; int n,m,res0; struct pt{int x,y,r; }; typedef pair<int,int> pii; map <pii,int> a;//炸雷的map,键是x,y,值是r map <pii,int&…...

【Python】 -- 趣味代码 - 小恐龙游戏

文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码&#xff0c;专为学校招生场景量身打造&#xff0c;功能实用且操作便捷。 从技术架构来看&#xff0c;ThinkPHP提供稳定可靠的后台服务&#xff0c;FastAdmin加速开发流程&#xff0c;UniApp则保障小程序在多端有良好的兼…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章&#xff1f;AI自动生成&#xff0c;效率提升10倍&#xff01; 支持多语言、自动配图、定时发布&#xff0c;让内容创作更轻松&#xff01; AI内容生成 → 不想每天写文章&#xff1f;AI一键生成高质量内容&#xff01;多语言支持 → 跨境电商必备&am…...

OpenLayers 分屏对比(地图联动)

注&#xff1a;当前使用的是 ol 5.3.0 版本&#xff0c;天地图使用的key请到天地图官网申请&#xff0c;并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能&#xff0c;和卷帘图层不一样的是&#xff0c;分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...

Map相关知识

数据结构 二叉树 二叉树&#xff0c;顾名思义&#xff0c;每个节点最多有两个“叉”&#xff0c;也就是两个子节点&#xff0c;分别是左子 节点和右子节点。不过&#xff0c;二叉树并不要求每个节点都有两个子节点&#xff0c;有的节点只 有左子节点&#xff0c;有的节点只有…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

基于 TAPD 进行项目管理

起因 自己写了个小工具&#xff0c;仓库用的Github。之前在用markdown进行需求管理&#xff0c;现在随着功能的增加&#xff0c;感觉有点难以管理了&#xff0c;所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD&#xff0c;需要提供一个企业名新建一个项目&#…...

C++:多态机制详解

目录 一. 多态的概念 1.静态多态&#xff08;编译时多态&#xff09; 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1&#xff09;.协变 2&#xff09;.析构函数的重写 5.override 和 final关键字 1&#…...