【算法专题训练】29、树的深度优先遍历

【信息科学与工程学】【物理/化学科学和工程技术】知识体系87——声学基础02 应用声学 编号类型领域问题问题的数学分析参数列表及常量/常数及参数的数值范围关联知识1技术应用应用声学如何利用超声波反射测量距离?设发射脉冲与接收回波的时间差为 Δt,声速为 c,则目标距离 d = c·Δt / 2。c ≈ 340 m/s (空气中,20°C);Δt 通常为 0.1 ms ~ 100 ms;d 对应范围约 0.017 m ~ 17 m。声波传播、反射定律、压电换能器、时延估计2现象分析应用声学为什么在音乐厅中某些位置听到的声音更清晰?声压级叠加:总声压级 Lp = 10 log₁₀(Σ 10^(Lp 阅读详情

1、树的基础知识

  • 二叉树中每个节点最多只有两个子节点,分别称为左子节点和右子节点。
  • 二叉树的根节点没有父节点,一棵非空二叉树只有一个父节点
  • 二叉树的叶子节点没有子节点

二叉树节点数据类型:

struct TreeNode
{
    int val;
    TreeNode *left;
    TreeNode *right;
    TreeNode() : val(0), left(nullptr), right(nullptr) {}
    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
}

2、中序遍历

  • 中序遍历的顺序,是先遍历二叉树的左子树,然后遍历二叉树的根节点,最后遍历二叉树的右子树。
  • 中序遍历是相对于根节点来说的,中序是说根节点在中间顺序遍历,相对于他的左右子树来说。
    代码实现方式有两种,递归与迭代实现方式

递归代码实现:

void inorderTraversal1(TreeNode *node)
{
  if (node == nullptr)
  {
    return;
  }
  inorderTraversal1(node->left);
  std::cout << node->val << " ," << std::endl;
  inorderTraversal1(node->right);
}

迭代代码实现

  • 中序遍历:迭代法
  • 使用栈保存遍历的结点,从根节点开始遍历
  • 遍历顺序为先遍历左子树,接着遍历根节点,最后遍历右子树
  • 所以如果有有左子树节点,则需要不断遍历其左子节点,并放到栈中保存
    • 当遍历到最左侧的叶子结点时,已经没有左子结点,则需要遍历当前根节点,对栈顶元素出栈
  • 此时,对于这棵子树来说,已经遍历完了左子树和根节点,接下来需要遍历右子树了,所以当前遍历根节点转换到右子节点上来
  • 如果右子节点为空,则继续从栈中取出栈顶元素来处理,
  • 所以要实现不断遍历到最左侧的左子结点,需要使用while循环不断遍历到做左子结点并保存到栈中
  • 如何左子结点遍历到叶子结点,则遍历当前的根节点,接着遍历他的右子节点,
  • 如果右子节点为空,则从栈中取出之前遍历的左子节点,他是更上一层的父节点
  • 如果右子节点和栈都为空了,则说明整棵树都遍历完了。
void inorderTraversal2(TreeNode *node)
{
  std::stack<TreeNode *> stack;
  TreeNode *curr = node;
  while (curr != nullptr || !stack.empty())
  {
    while (curr != nullptr) // 不断深入遍历左子节点,知道最左侧的叶子结点
    {
      stack.push(curr);
      curr = curr->left;
    }

    // 当前curr为叶子结点的左子节点,为空,需要从栈中取出栈顶元素来遍历
    curr = stack.top();
    stack.pop();
    // 打印
    std::cout << curr->val << " ," << std::endl;
    /**
     * 遍历他的右子节点
     * - 如果右子节点不为空,则以右子节点为根节点,继续遍历他的左子结点
     * - 如果右子节点为空,则当前这棵子树遍历完了,需要从栈中取出他对应的父节点进行遍历
     */
    curr = curr->right;
  }
}

3、前序遍历

  • 前序遍历:先遍历根节点,再遍历左子树,最后是右子树

递归代码实现:

void preorderTraversal1(TreeNode *node)
{
  if (node == nullptr)
  {
    return;
  }
  std::cout << node->val << " ," << std::endl;
  preorderTraversal1(node->left);
  preorderTraversal1(node->right);
}

迭代代码实现:

  • 前序遍历:迭代实现
  • 使用栈保存遍历到的结点数据,先遍历根节点,再遍历左子树,最后遍历右子树
void preorderTraversal2(TreeNode *node)
{
  std::stack<TreeNode *> stack;
  while (node != nullptr || !stack.empty())
  {
    // 节点不为空,则不断获取他的左子节点,并放入到栈中
    while (node != nullptr)
    {
      std::cout << node->val << " ," << std::endl;
      stack.push(node);
      node = node->left;
    }

    /**
     * 当左子树都遍历完了(node为空),则取出栈中的元素(一定有数据),
     * 栈顶元素为当前node节点的父节点,取出来遍历他的右子树
     */
    TreeNode *topNode = stack.top();
    stack.pop();
    node = topNode->right;
  }
}

4、后续遍历

  • 后序遍历:
  • 先遍历左子树,再遍历右子树,最后是根节点

递归代码实现:

void postorderTraversal1(TreeNode *node)
{
  if (node == nullptr)
  {
    return;
  }
  postorderTraversal1(node->left);
  postorderTraversal1(node->right);
  std::cout << node->val << " ," << std::endl;
}

迭代代码实现:

  • 后续遍历:迭代实现
  • 后续遍历的顺序是,先遍历左子树,接着遍历右子树,最后才是根节点
  • 同样先使用while循环不断遍历左子节点,并将遍历到的结点放到栈中
  • 当遍历到左侧的叶子结点时,取出栈顶节点,但是该结点现在还不做出栈操作,而是先判断他的右子节点之前是否遍历过
  • 如果之前没有遍历过,则继续以他的右子节点为根节点进行遍历,如果之前遍历过,则遍历遍历当前结点,并且栈顶元素出栈
  • 此时说明这棵左子树全部遍历完成,需要将curr的遍历结点设置为空,以便从栈中取出他的父节点,继续遍历他的右子树
    • 现在的问题是如何判断他的右子节点之前是否遍历过,通过设置一个prev属性,继续当前遍历的结点
void postorderTraversal2(TreeNode *node)
{
  std::stack<TreeNode *> stack;
  TreeNode *curr = node;
  TreeNode *prev = nullptr;
  while (curr != nullptr || !stack.empty())
  {
    // 不断遍历查找他的左子节点
    while (curr != nullptr)
    {
      stack.push(curr);
      curr = curr->left;
    }

    // 左子树遍历完了,需要从获取出栈顶元素
    TreeNode *topNode = stack.top();
    // 判断之前是否遍历过他的右子节点,有左子节点,且之前没有遍历过-》继续遍历他的左子节点
    if (topNode->right != nullptr && prev != topNode->right)
    {
      curr = topNode->right;
    }
    else
    {
      // 出栈,
      stack.pop();
      std::cout << topNode->val << " ," << std::endl;
      prev = topNode;
      curr = nullptr; // 设置为空,让下一步从栈中取出父节点进行遍历
    }
  }
}

5、总结

  • 树的深度优先遍历
  • 一棵二叉树,可以继续分为根节点和左子树与右子树,所以一共有三种深度优先遍历顺序,分别是前序遍历,中序遍历和后续遍历,这三种遍历顺序都是相对于根节点来表示的。
  • 树的深度优先遍历的递归实现方式,代码简单,就是有点太抽象了
  • 转换成迭代方式,使用栈数据结构来保存遍历的结点,更易于理解,树的深度优先遍历,都是先找到他的最左侧子节点,所以需要通过while循环不断遍历树的左子结点并放入到栈中保存。而后再从栈中取出来使用。
【信息科学与工程学】计算机科学与自动化——第一百五十五篇 缓存系统设计02 编号176-190共15个条目,覆盖了缓存互连网络(环形/交叉开关)、硅光互连、散热设计、3D封装TSV、信号完整性、冗余设计、老化补偿、电磁兼容、时钟分布、JTAG测试、安全硬件、调试探针、容错路由、体偏置、共振时钟。:编号161-175共15个条目,聚焦于缓存硬件设计与配置,涵盖了MESI协议、多级TLB、分支预测BTB/BHT、自适应预取引擎、ECC纠错汉明码、路分区硬件、非暂时性存储旁路、缓存冲刷指令、缓存锁定、压缩硬件、嗅探过滤器、虚拟化EPT、QoS限速、内置自测BIST、电源管理DVFS。 阅读详情

相关推荐

Kafka延迟队列实现方案全解析

$ \text{时间轮} = \text{环形数组} + \text{分层设计} $$需要补充代码实例或特定场景的优化方案可进一步细化,此大纲已覆盖核心技术路径。

lz989796的博客 817

数据结构——深度优先遍历

最小深度是从根节点到最近叶子节点的最短路径的长度。中序遍历(Inorder Traversal):先递归地访问左子树,然后访问根节点,最后递归地访问右子树。后序遍历(Postorder Traversal):先递归地访问左子树,然后递归地访问右子树,最后访问根节点。最大深度是从根节点到最远叶子节点的最长路径的长度。二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。输入:root = [3,9,20,null,null,15,7]最小深度是从根节点到最近叶子节点的最短路径上的节点数量。

weixin_43945471的博客 3330

DeepSpeed Zero3 Offload实战:从GCC版本检查到环境配置的完整避坑指南

本文是一份针对DeepSpeed Zero3 Offload部署的完整避坑指南。针对训练中常见的`AttributeError: ‘DeepSpeedCPUAdam‘ object has no attribute ‘ds_opt_adam`报错,文章深入剖析了其根源在于GCC编译器版本过低。指南提供了从系统GCC版本深度探查、安全启用高版本GCC环境,到DeepSpeed一致性安装验证的全链路实战方案,旨在帮助用户构建稳定的大模型训练环境。

weixin_29070721的博客 473

Acwing 846-树的重心

#include<bits/stdc++.h> using namespace std; const int N=1e5+10; int n; vector<int> G[N]; bool vis[N]; int ans=N; //以u为根的子树中点的数量 int dfs(int u) { vis[u]=true; int sum=1,res=0; for(auto i : G[u]) { if(!vis[i]) .

她与伞皆过客的博客 593

MATLAB安装配置libsvm(附MinGW64配置)

首先声明版本,本人PC系统Windows10 64bit,matlab安装的2016b,libsvm安装的version3.2.21.首先需要下载libsvm包:从林教授的网站上下载: http://www.csie.ntu.edu.tw/~cjlin/libsvm/2.将libsvm3.2.2解压到matlab/toolbox目录下:解压后:D:\matlab2016b\toolbox\libs...

github_35807147的博客 4万+

旅行青蛙破解汉化教程——蹭个热度

汉化破解版资源(无尽三叶草与点券): https://github.com/wisdombyzf/lxqw/blob/master/lxqw_zf.apk 截图: 破解方法: 工具: 1,APKIDE https://www.pd521.com/thread-818-1-2.html 2,dnspy https://down.52pojie.

github_38838414的博客 3785

数据结构-树与深度优先遍历

 笔者在读书时,选择的专业是计算机科学,但和大家一样,在处理线性的问题时较为熟悉,但当自己在尝试理解树和图这种非线性结构时,就总无法深刻准确的理解,为此,也很苦恼很无奈,但也没有什么好的办法。这次趁着完成了《漫画算法》的阅读,再次总结一下关于书中树的内容,也许是几年的工作经历吧,让自己对于代码的编写和理解有了更多的体会,也了解到这种非线性结构的重要性。漫画算法这本书确实生动简洁,理解起来方便,大家对于数据结构感兴趣的,可以也买这本书读读,挺有意思的。图画的形式确实能增强理解性。 概念理解 树这种结构与链表不

不当初 3140

XGBoost算法案例 - 红酒品质分类

数据集共包含 11 个特征,共计 3269 条数据. 我们通过训练模型来预测红酒的品质, 品质共有 6 个各类别,分别使用数字: 0、1、2、3、4、5 来表示。

YIAN爱学习的博客 449

树的深度优先遍历

树与树的深度遍历方法

weixin_55438199的博客 1997

Cocos Creator 3.x 实战:用脚本动态加载Spine动画,告别resources硬编码

本文详细介绍了Cocos Creator 3.x中Spine动画的动态加载与挂点系统实战技巧。通过Asset Bundle替代传统resources硬编码方式,实现资源的高效管理和热更新支持,同时结合TypeScript强类型和单例模式优化加载流程。文章还深入探讨了跨平台适配、挂点编程方案及性能优化策略,帮助开发者提升游戏开发效率与灵活性。

weixin_42526353的博客 267

智慧加油站小程序数据库设计文档

【代码】智慧加油站小程序数据库设计文档。

低代码布道师的博客 1402

算法总结-深度优先遍历和广度优先遍历

所以广度优先遍历也叫层序遍历,先遍历第一层(节点 1),再遍历第二层(节点 2,3,4),第三层(5,6,7,8),第四层(9,10)。(1)、我们从根节点1开始深度优先遍历,它相邻的节点有2、3、4,依先遍历节点2,再遍历2的右边节点5,再遍历9,至此便无可遍历的节点。对于每个节点来说,先遍历当前节点,然后把右节点压栈,再压左节点(这样弹栈的时候会先拿到左节点遍历,符合深度优先遍历要求)。广度优先遍历,指的是从图的一个未遍历的节点出发,先遍历这个节点的相邻节点,再依次遍历每个相邻节点的相邻节点。

hhhlizhao的博客 2万+

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

Python 爬虫实战:华尔街见闻精选文章爬取(反反爬 + 投资情绪分析)

yansideyucsdn的博客 969

蓝桥杯国赛Python模拟题深度解析:从算法原理到实战避坑

动态规划和深度优先搜索是算法竞赛中的核心思想,动态规划通过定义状态与转移方程高效解决最优化问题,而深度优先搜索则系统性地枚举所有可能路径,是解决组合与路径问题的利器。掌握这些算法原理,能显著提升在数据结构应用、数学建模及代码优化方面的工程实践能力。在蓝桥杯等编程竞赛中,此类技术是攻克高难度题目的关键。本文以一份高仿真度的国赛级Python模拟题为载体,深入剖析了动态规划在路径规划问题中的状态定义与转移,以及深度优先搜索在排列组合问题中的回溯框架,为备赛者提供了从识别算法模型到代码实现的完整实战指南。

weixin_34050519的博客 460

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

决策树算法ID3、C4.5、CART:从信息增益到基尼系数的选型与实战

决策树是一种基于特征分裂的监督学习模型,其核心原理是通过信息熵、信息增益、增益率或基尼系数等指标选择最优分裂点,从而构建树结构。这些指标决定了模型对特征类型、缺失值处理及过拟合控制的适应性。在工程实践中,ID3、C4.5和CART分别适用于不同场景:ID3适合离散特征教学,C4.5支持连续特征和剪枝,CART则统一处理分类回归并具备高效剪枝。理解这些算法的计算逻辑与选型依据,能帮助开发者在特征工程、基线模型选择及面试中做出更优决策。

weixin_30861459的博客 335

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python机器学习:从零基础到项目实战

当您翻开此书,您正踏入一场数据与智慧的修行。机器学习,并非冰冷的符码,而是机器模拟人类洞察世界的法门。本书将带您,以Python为舟,泛游于算法之海。我们不只传授“术”,更探求其后的“道”——从数据的生灭流转中观照规律,于模型的迭代演进里体悟得失。愿您合上书卷时,收获的不仅是驾驭数据的技能,更有一双洞悉复杂、化繁为简的“智慧之眼”。现在,让我们一同启程。

YunWisdom 968

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

KD树实现人群行为与地理空间的动态邻近分析

KD树是一种经典的多维空间索引数据结构,其核心原理是通过递归轴向分割构建平衡二叉树,并利用超平面距离剪枝实现高效K近邻搜索。在用户行为分析场景中,它能将地理坐标(经纬度)与人口统计特征(如年龄、教育、职业)融合为混合特征向量,以可计算的方式定义‘附近’与‘同类人群’,显著优于行政区划粗粒度切分或暴力遍历。该技术具备低延迟(毫秒级查询)、内存友好、Python生态成熟(scipy.spatial.cKDTree)等工程优势,广泛适用于本地生活选址、社区化精准营销、线下零售人群洞察等需要空间+属性双重约束的业务

weixin_34074740的博客 352

基础算法--树与图的深度优先遍历

从名字上的“深度优先”,我们很容易联想到深度优先搜索(DFS)。顾名思义,树与图的深度优先遍历与BFS,它们的核心思想究其根本都是递归。递归的自我做题感悟:1、递归到下一层的时候,灵活运用递归回来的时候前面的条件2、递归回溯的时候,递归之后的条件是返回给上一层的。

2202_75418863的博客 1343

【数据结构】二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

二叉树的·深度优先遍历(前中后序遍历)and·广度优先(层序遍历)

luhaoran814的博客 3535

深度优先遍历(DFS)

深度优先遍历(,全称为),是我们树或者图这样的数据结构中常⽤的⼀种。这个算法会尽可能深的搜索树或者图的分⽀,直到⼀条路径上的所有节点都被遍历完毕,然后再回溯到上⼀层,继续找⼀条路遍历。以及。因为树的定义本⾝就是递归定义,因此采⽤递归的⽅法去实现树的三种遍历不仅容易理解⽽且代码很简洁。并且前中后序三种遍历的唯⼀区别就是,在做题的时候,选择⼀个适当的遍历顺序,对于算法的理解是⾮常有帮助的。

ijj_zZ的博客 2985

二叉树遍历(深度优先+广度优先)

二叉树的遍历分为两类,一类是深度优先遍历,一类是广度优先遍历。

Doublelv 的博客专栏。 1万+

数据结构与算法 | 树的深度优先遍历

# CY3761 | 2021-12-22 11:15 """ A BC(A) DE(B) FG(C) H(D) 树的深度优先遍历 先序遍历 根节点->左子树->右子树 从根开始 是否具有子树?是 遍历左节点.. 接着循环 是否具有子树,无 往上一层,是否具有右子树?是 遍历右节点.. 接着循环 假设如果E有子节点,则继续下层遍历左再往上遍历右 A->B->D->H->E->C->F->G 中序遍历 左子树->右子树->根节点

CY3761的博客 1233

数据结构--树存储结构 & 深度优先遍历 & 广度优先遍历 通俗易懂

树的概念 ​ 首先,树是一种常用的非线性数据结构,是以边(Edge)相连的节点(Node)的集合,每个节点存储对应的值,当存在子节点时与之相连。 根节点:是树的首个节点 边:所有节点都由边相连,用于标识节点间的关系 叶子结点:树的末端节点,它们没有子节点 树的高度:由根节点出发,到子节点的最长路径长度(从下往上) 树的深度:指对应节点到根节点路径长度(从上往下) 空树:如果树节点个数为零,那么构成的树成为空树 树的层:从一棵树的树根开始,树根所在层为第一层,树的孩子节点所在的层为第二层,以此类推。 节点

weixin_43710037的博客 3070

二叉树(一):深度优先遍历与广度优先遍历

二叉树是一种非常高效的数据结构,树结构可以高效地查找和搜索语义,比如近邻算法中就用到了树来存储训练数据,大大提高了近邻搜索的效率,又比如电脑的文件管理器,都采用了树结构,通过树查找会变得十分快捷。总之,二叉树这种数据结构的应用非常广泛,能够大大提高搜索效率,本文将全面讲解二叉树结构以及二叉树的相关算法,相信会对大家数据结构与算法的学习产生很大的帮助。...............

Mike_honor的博客 3337

【数据结构】多叉树的深度优先遍历DFS和广度优先遍历BFS(含C++递归和非递归方式实现)

本文主要讲解多叉树的遍历,并附有相关代码。

weixin_50941083的博客 6061

树的深度与广度优先遍历

树是前端工程师最经常打交道的一个数据结构,比如说html标签组成的dom树、树形控件等。 在js中没有树这个数据结构,但是可以用Object和Array来构建树: //val是当前的节点值,children是子节点 const tree = { val: 'A', children: [ { val: 'B', children: [ { val: 'D',

weixin_58855537的博客 4662
上一篇: 【算法专题训练】28、队列与二叉树层序遍历
下一篇: 【算法专题训练】30、二叉树的应用
Tim_10
博客等级 码龄2年 162粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值