首页 > 其他分享 >深度优先搜索(DFS)

深度优先搜索(DFS)

时间:2023-11-19 10:56:30浏览次数:35  
标签:Node 优先 遍历 int DFS right 搜索 new delete

深度优先搜索(DFS)

我们以二叉树的遍历为例子。

先序遍历

遍历过程

  1. 访问根节点
  2. 先序遍历其左子树
  3. 先序遍历其右子树

中序序遍历

遍历过程

  1. 中序遍历其左子树
  2. 访问根节点
  3. 中序遍历其右子树

后序遍历

遍历过程

  1. 后序遍历其左子树
  2. 后序遍历其右子树
  3. 访问根节点

我们使用数组来模拟二叉数,使用代码实现如下:

展开查看
#include<bits/stdc++.h>
using namespace std;
const int N = 9;
int a[N]; // 根节点在a[1]
void proOrder(int index){
    if(index >= N) return;
    cout << a[index] << endl;
    proOrder(2 * index);
    proOrder(2 * index + 1);
}
int main(){
    for(int i = 1; i < N; i ++ ) a[i] = i;
    proOrder(1);
    return 0;
}
/*
运行结果
1
2
4
8
5
3
6
7
*/

我们使用结构体模拟二叉树,代码实现如下:

展开查看
#include<bits/stdc++.h>
using namespace std;
struct Node{
    Node(int val){
        this -> val = val;
        this -> left = nullptr;
        this -> right = nullptr;
    }
    int val;
    Node *left;
    Node *right;
};
void proOrder(Node *node){
    if(!node) return;
    cout << node -> val << endl;
    proOrder(node -> left);
    proOrder(node -> right);
}
int main(){
    Node *node1 = new Node(1);
    Node *node2 = new Node(2);
    Node *node3 = new Node(3);
    Node *node4 = new Node(4);
    Node *node5 = new Node(5);
    Node *node6 = new Node(6);
    Node *node7 = new Node(7);
    node1 -> left = node2;
    node1 -> right = node3;
    node2 -> left = node4;
    node2 -> right = node5;
    node3 -> left = node6;
    node3 -> right = node7;
    proOrder(node1);
    delete node1;
    delete node2;
    delete node3;
    delete node4;
    delete node5;
    delete node6;
    delete node7;
    return 0;
}
/*
运行结果
1
2
4
8
5
3
6
7
*/

由此可见,运行结果是一样的。
我们来画图分析如下:
image
我们简化此图形,此图一般称之为深搜树剪枝一词便来源于此
image

记忆化深度搜索

点点的

标签:Node,优先,遍历,int,DFS,right,搜索,new,delete
From: https://www.cnblogs.com/zshsboke/p/17013164.html

相关文章

  • delphi dev cxLookupComboBox 模糊搜索
    //不是过滤DATASET,适合用在下拉数据很多的情况。过滤的必须是下拉有添加的列procedurecxLookupComboBoxLikeSearchInitPopup(Sender:TObject);varFEdit:TcxLookupComboBoxabsoluteSender;i:integer;begin//ifFEdit.Properties.IncrementalSearchthen//FEdit......
  • 【动态规划】最优二叉搜索树
    问题描述:最优二叉搜索树的定义对给定的概率集合,期望搜索代价最小的二叉搜索树称为最优二叉搜索树这里把概率用结点权值代替,只讨论成功结点的搜索期望。给定n个有序的值,{k1,k2.....kn},其中ki=i;k1到kn对应的权值分别为{w1......
  • 磁力搜索引擎大全教程,如何使用磁力链接。
      磁力链接是一种特殊的下载链接,磁力链接可以理解为一个文件识别码,而并非具体的资源地址,下载软件需要拿着这个识别码去整个互联网(DHT网络)去寻找持有该资源的用户(节点),如果找到则可以进行传输下载。一般年代越久远的磁力链接下载成功的几率越小,因为持有该资源的节点越少。一......
  • HDFS
    目录HDFS1、HDFS概述1.1hdfs产生背景和意义1.2HDFS优缺点1.3HDFS组成架构1.4HDFS文件块大小2、HDFS的Shell(命令)3、API4、HDFS的读写流程(面试重点)4.1.1写入流程4.1.2网络拓扑-节点距离计算4.1.3机架感知4.2HDFS读数据流程5、NameNode和SecondaryNameNode5.1NN和2NN的......
  • Angular 应用的搜索引擎优化(SEO)实战指南
    笔者之前在掘金社区发表了两篇关于Angular开发的文章,分别介绍了Angular支持服务器端渲染和PWA的技术细节:基于AngularUniversal引擎进行服务器端渲染的前端应用StateTransfer故障排查案例Angular应用支持PWA(ProgressiveWebApplication)特性的开发步骤分享本......
  • 结合性和优先的联系与区别
    一、结合性与优先性当我们考虑运行一段复杂表达时,我们是先考虑优先级再考虑结合性。也就是说优先级高的先运算出结果,然后在同一优先级的情况下去判断结合性。二、题目inti=-2;intn=++i==0?99:i==-1?11:22;请问n的值是多少?答:n=11!why?根据优先级,++......
  • 来自 szc 的字符串和搜索的总结
    膜拜szc大佬。原链接。题单+代码哈希普通哈希不讲了,讲讲树哈希。对于判断一对同构树,要考虑相同结构的儿子在两类树的不同位置。此时有两种方法,一种是正常的按序哈希,我们很好想到在哈希时对儿子节点的哈希值进行排序,规定一个顺序塞进去。另一种方法则是不使用多项式哈希,对......
  • Python模块的搜索路径
    在Python中,模块搜索路径是指解释器用来查找导入模块的位置列表。了解和掌握Python模块搜索路径对于正确导入模块和管理模块的位置至关重要。Python模块搜索路径的主要来源包括当前目录、Python标准库目录和用户自定义的目录。你可以通过sys模块中的sys.path来查看和修改模块搜索......
  • 苏宁API:一键搜索,海量商品任你选!
    使用苏宁API按关键字搜索商品,可以在API的搜索参数中设置关键字。例如,在搜索商品时,可以在API的请求参数中设置q=关键字。例如,要搜索“鞋子”,可以将q设置为“鞋子”。另外,还可以设置其他的搜索参数,例如start_price和end_price可以设置价格范围,cat可以设置商品分类ID,sort可以设置排序......
  • 函数声明提升优先级高于变量声明提升; 提升就是声明(变量/函数)提至当前作用域的最顶
    执行以下程序,输出结果为()vara=2;functionfn(){b();return;vara=1;functionb(){console.log(a);}}fn();A1B2CundefinedD抛出异常正确答案:C虽然return语句可以终止函数,但是return语句后如果有变量和函数声明,仍然存在变量提升和函数提升......