首页 > 其他分享 >7.4.1

7.4.1

时间:2024-06-18 17:13:34浏览次数:21  
标签:nextsibling unsigned firstChild sibling 7.4 CSNode visited

深度优先生成树

参考书:《数据结构(C语言版)》严蔚敏

书中 7.4.1 节

#include <vector>
#include <queue>
#include <iostream>

using namespace std;

struct CSNode {
    int     data;
    CSNode  *firstChild;
    CSNode  *nextsibling;
    CSNode(int d, CSNode* f = nullptr, CSNode* n = nullptr)
        : data(d), firstChild(f), nextsibling(n) {}
};

// 深度优先生成树
void DFSTree(const vector<vector<unsigned>>& G, vector<bool>& visited, unsigned v, CSNode* T) {
    visited[v] = true;
    bool first = true;
    CSNode* q = nullptr;;
    for (unsigned w : G[v]) {
        if (!visited[w]) {
            CSNode* p = new CSNode(w);
            if (first) {
                T->firstChild = p;
                first = false;
            } else {
                q->nextsibling = p;
            }
            q = p;
            DFSTree(G, visited, w, q);
        }
    }
}

// 层序输出树
void print(CSNode* root) {
    if (!root) return;

    std::queue<CSNode*> q;
    q.push(root);

    while (!q.empty()) {
        unsigned num = q.size();
        for (unsigned i = 0; i < num; ++i) {
            CSNode* node = q.front(); // 取出队首节点
            q.pop();
            std::cout << "V" << 1 + node->data << " ";

            // 将当前节点的所有子节点入队
            if (node->firstChild) {
                q.push(node->firstChild);
                // 将当前子节点的所有兄弟节点依次入队
                CSNode* sibling = node->firstChild->nextsibling;
                while (sibling) {
                    q.push(sibling);
                    sibling = sibling->nextsibling;
                }
            }
        }
        cout << endl;
    }
}

int main() {
    vector<vector<unsigned>> G4 = {
        {1, 2},
        {0, 3, 4},
        {0, 5, 6},
        {1, 7},
        {1, 7},
        {2, 6},
        {2, 5},
        {3, 4}
    };

    CSNode* T = new CSNode(0);
    vector<bool> visited(G4.size(), false);
    DFSTree(G4, visited, 0, T);
    print(T);

    return 0;
}

标签:nextsibling,unsigned,firstChild,sibling,7.4,CSNode,visited
From: https://www.cnblogs.com/AngleLin/p/18254697

相关文章

  • 7.4.3 最小生成树
    最小生成树参考书:《数据结构(C语言版)》严蔚敏正在学习这本书,把书中的数据结构用c++代码实现了一遍prim算法#include<vector>#include<cstdio>#include<climits>usingnamespacestd;unsignedminimum(constvector<pair<unsigned,int>>&closedge){unsign......
  • YOLOv5改进策略|YOLOv5鸟类检测,准确率可以达到 87.40%,提升了21.25%,实时检测⻛力发电
    订阅专栏后私信获取完整源码+远程部署目录简介材料和数据收集实验环境实验数据方法YOLOv5RetinexNet模型测试结果与分析结论        ⻛力发电机组的安全是海上⻛电场稳定运行的前提。然而,⻦害对⻛力发电机和⻛力发电机叶片的安全运行构成直接威胁。此......
  • kylinV10SP3安装MySQL5.7.44
    需要的安装包:mysql-community-common-5.7.44-1.el7.x86_64.rpmmysql-community-libs-5.7.44-1.el7.x86_64.rpmmysql-community-client-5.7.44-1.el7.x86_64.rpmmysql-community-server-5.7.44-1.el7.x86_64.rpm开始安装,安装顺序:common->libs->client->serverrpm-ivhmysq......
  • candence17.4 板框、原点、尺寸标注的图文步骤
    一、板框  1、在右侧Optins,选择BoardGeometryClass(父类)中OutlineSubclass(子类)  2、Add→line随便画一个图形,由于直接使用Add->Line或者Add下的绘制工具都是不能绘制成功,Allegro不认它是封闭图形,需要通过用Composeshape把外框做成封闭图形才行。  3、在......
  • 【转】centos7.9源码安装mysql5.7.44
    原文:https://blog.csdn.net/SeeYouGoodBye/article/details/1352314511、环境介绍centos7.9mysql5.7.44boost1.59.0注意:这里的编译版本mysql5.7.44和boost1.59.0是有依赖的,建议使用相同版本2、安装编译要用的依赖软件yuminstall-ygccgcc-c++cmakelibaio-develncu......
  • 1. 实战7.4HDU1710-由先序和中序序列产生后序序列
    希冀平台:代码:#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<string.h>#include<iomanip>#include<stdlib.h>#include<map>#includ......
  • 关于在CentOS7的docker容器下启动MySQL5.7.44卡住的问题的解决办法
    最近想在docker中跑一个MySQL5.7版本的服务,而且要基于CentOS,所以着手自己构建镜像。容器的构建参照下面这篇文章基于CentOS7镜像容器的MySQL环境构筑-sxb_sunday-博客园(cnblogs.com)构建完成后,用下面命令启动MySQL服务的时候,启动进程一直卡住没有反应,只能CTRL+C强制停止。......
  • [转载]一些人士论文的学术指标[2017.4.26 from sina blog]
    大连海事大学贾欣乐教授博文。原文地址:一些人士论文的学术指标作者:贾欣乐    ......
  • Failing package is: mysql-community-server-5.7.44-1.el7.x86_64 GPG Keys are con
    Failingpackageis:mysql-community-server-5.7.44-1.el7.x86_64GPGKeysareconfiguredas:file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql  执行 wget--quiet--output-document-https://repo.mysql.com/RPM-GPG-KEY-mysql-2022|gpg--no-default-keyring--keyr......
  • PowerShell 5.1、7.2、7.3、7.4和7.5之间的主要区别
    PowerShell5.1、7.2、7.3、7.4和7.5之间的主要区别:跨平台支持:PowerShell5.1:仅在Windows平台上可用。PowerShell7.2、7.3、7.4、7.5:支持跨平台,在Windows、Linux和macOS等操作系统上都可以运行。基于的.NET平台:PowerShell5.1:基于.NET Framework。PowerShell7.2、......