二叉树二叉树的定义:123456789/** * Definition for a binary tree node. * function TreeNode(val, left, right) { * this.val = (val===undefined ? 0 : val) * this.left = (left===undefined ? null : left) * this.right = (right===undefined ? null : right) * } *//** 二叉树的直径 给你一棵二叉树的根节点,返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 1234567891011121314151617181920212223242526/** * Definition for a binary tree node. * function TreeNode(val, left, right) ...
哈希表594. 最长和谐子序列 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 。 给你一个整数数组 nums ,请你在所有可能的 子序列 中找到最长的和谐子序列的长度。 数组的 子序列 是一个由数组派生出来的序列,它可以通过删除一些元素或不删除元素、且不改变其余元素的顺序而得到。 123456789101112131415161718192021/** * @param {number[]} nums * @return {number} */var findLHS = function(nums) { let newmap = new Map() for(let i=0;i<nums.length;i++){ if(newmap.has(nums[i])){ newmap.set(nums[i],newmap.get(nums[i])+1) }else{ newmap.set(num ...
图论 岛屿数量 给你一个由 '1'(陆地)和 '0'(水)组成的的二维网格,请你计算网格中岛屿的数量。 岛屿总是被水包围,并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外,你可以假设该网格的四条边均被水包围。 1234567891011121314151617181920212223242526272829/** * @param {character[][]} grid * @return {number} */var numIslands = function(grid) { const weight = grid[0].length const height = grid.length const dfs = (x,y)=>{ if(x<0||y<0||x>=height||y>=weight||grid[x][y]!=='1'){ return; ...
一.数组1. 添加和删除元素的方法1.1 push 功能:在数组末尾添加一个或多个元素。 返回值:新数组的长度。 示例: 12const arr = [1, 2, 3];arr.push(4, 5); // [1, 2, 3, 4, 5] 1.2 pop 功能:删除数组末尾的一个元素。 返回值:被删除的元素。 示例: 12const arr = [1, 2, 3];const removed = arr.pop(); // [1, 2], removed = 3 1.3 unshift 功能:在数组开头添加一个或多个元素。 返回值:新数组的长度。 示例: 12const arr = [2, 3];arr.unshift(0, 1); // [0, 1, 2, 3] 1.4 shift 功能:删除数组开头的一个元素。 返回值:被删除的元素。 示例: 12const arr = [1, 2, 3];const removed = arr.shift(); // [2, 3], removed = 1 1.5 splice 功能:修改数组内容,可删除、替换或添加元素。 ...
http协议HTTP(超文本传输协议)是用于传输网页和其他资源的协议。以下是 HTTP 协议的主要知识点: 1. HTTP 基本概念 定义:HTTP 是一个应用层协议,定义了客户端(如浏览器)和服务器之间的通信规则,用于传输超文本(如 HTML)。 无状态:HTTP 协议本身是无状态的,这意味着每个请求都是独立的,服务器不保留任何关于客户端的状态信息。 请求-响应模型:客户端发送请求,服务器处理请求并返回响应。 2. HTTP 方法 GET:从服务器请求指定的资源。它是无副作用的,只用于获取数据,不会修改服务器上的资源。 POST:向服务器提交数据,通常用于提交表单或上传文件,会在服务器上创建或修改资源。 PUT:将数据上传到服务器,通常用于更新现有资源。 DELETE:从服务器删除指定的资源。 HEAD:类似于 GET 请求,但服务器只返回响应头,不返回实体内容。通常用于获取元数据。 OPTIONS:用于查询支持的 HTTP 方法,服务器返回允许的操作方法。 PATCH:对资源进行部分修改。 3. HTTP 请求报文 请求行 :包含 HTTP 方法、请求目标(URL)和 HTTP ...
数据结构
未读数据结构13-平衡二叉树平衡二叉树(Balanced Binary Tree),也称为AVL树(以发明者 Adelson-Velsky 和 Landis 命名),是一种高度平衡的二叉搜索树(BST)。它的核心目标是保证任意节点的左右子树高度差不超过 1,从而在最坏情况下仍能提供对数时间复杂度的查找、插入和删除操作。 以下是平衡二叉树的详细知识点: 折半查找的二叉判定树就是AVL树 1. 基本定义平衡二叉树是满足以下条件的二叉搜索树: 二叉搜索树性质:左子树所有节点的值小于根节点,右子树所有节点的值大于根节点。 平衡条件:任意节点的左右子树高度差(平衡因子,BF)绝对值不超过 1。 BF=Height(Left Subtree)−Height(Right Subtree)BF = \text{Height(Left Subtree)} - \text{Height(Right Subtree)}BF=Height(Left Subtree)−Height(Right Subtree) 2. 平衡因子 平衡因子可以是 -1, 0, 1: 0:左 ...
数据结构
未读数据结构14-哈夫曼树哈夫曼树(Huffman Tree)是由计算机科学家David A. Huffman于1952年提出的一种用于数据压缩的二叉树,它能有效地减少存储数据所需的空间。哈夫曼树广泛应用于无损数据压缩算法,如ZIP压缩、PNG图像格式、MP3音频格式等。哈夫曼编码是一种基于字符频率的变长编码,频率高的字符用较短的编码,频率低的字符用较长的编码,从而达到数据压缩的效果。 哈夫曼树的基本原理哈夫曼树的基本思想是:根据输入数据中字符的频率,构建一棵最优的二叉树,树中的每个叶子节点代表一个字符,每个字符的编码通过从根节点到叶子节点的路径来表示。路径中的左子树表示0,右子树表示1。在哈夫曼树中,频率较高的字符会有较短的编码,频率较低的字符会有较长的编码。 哈夫曼树的构建步骤构建哈夫曼树的过程一般分为以下几个步骤: 1. 统计字符频率首先需要统计输入数据中每个字符出现的频率。频率高的字符会优先获得较短的编码。 2. 创建哈夫曼树节点将每个字符及其频率作为一个单独的节点,将所有节点加入到一个优先队列(最小堆)中。队列中的节点会根据字符的频率进行排序,频率小的节点排在前面。 3. 构建哈 ...
数据结构
未读数据结构12-二叉排序树1
数据结构基础11-线索二叉树的三种写法 一.中序线索二叉树1.代码如下:12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;typedef struct BiThrNode { char data;// 数据 struct BiThrNode* leftchild;// 左指针 struct BiThrNode* rightchild;// 右指针 int LTag; // 左标志 int RTag; // 右标志}BiThrNode, * BiThrTree;// 全局定义一个线索化二叉树的一个全局变量BiThrNode* pre = NULL;// 二叉 ...
数据结构基础10-二叉树的创建与三种遍历-C/C++实现 前序遍历:根左右 中序遍历:左根右 后序遍历:左右根 一.二叉树的递归遍历1.代码如下123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869#include<stdio.h>#include<stdlib.h>#include<iostream>using namespace std;typedef struct Tree { char data;// 数据 struct Tree* leftchild;// 左子树 struct Tree* rightchild;// 右子树}tree, * treelist;// 二叉树的创建void createTree(treelist& app) { char ch; cin >> ch; ...