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

树-好难-疑难_GPT

//
// Created by 徐昌真 on 2024/11/10.
//
#include <iostream>
using namespace std;

template<typename T>
struct ListNode{  //新建链表节点
    T data;          //指向下一个子节点  ListNode< TreeNode<T>* > childHead;  这里的 T 是TreeNde类型的指针
    ListNode *next;  //指向兄弟节点
    ListNode(T d): data(d), next(NULL) {}
};

template<typename T>
struct TreeNode{  //树节点
    T data;
    ListNode< TreeNode<T>* > *childHead;

    TreeNode(): childHead(NULL) {}

    void addChild(TreeNode<T>* node){  //插入孩子节点
        ListNode < TreeNode<T>* > *childNode = new ListNode< TreeNode<T>* > (node);  //childNode保存了对node的指针 也就是node的地址
        if (childHead == NULL){
            childHead = childNode;
        }else{
            childNode->next = childHead;
            childHead = childNode;
        }
    }
};

template<typename T>
class Tree{
private:
    TreeNode<T> *nodes;
    TreeNode<T> *root;

public:
    Tree();
    Tree(int MaxNodes);
    ~Tree();
    TreeNode<T>* GetTreeNode(int id);
    void SetRoot(int rootId);
    void AddChild(int parentId, int sonId);
    void AssignData(int nodeId, T data);
    void Print(TreeNode<T> *node = NULL);
};

template<typename T>
Tree<T>::Tree(){  //默认构造函数
    nodes = new TreeNode<T>[100001];
}

template<typename T>
Tree<T>::Tree(int maxNodes) {  //传参构造函数
    nodes = new TreeNode<T>[maxNodes];
}

template<typename T>
Tree<T>::~Tree(){  //析构
    delete[] nodes;
}

template<typename T>
TreeNode<T>* Tree<T>::GetTreeNode(int id) {  //获取节点指针
    return &nodes[id];
}

template<typename T>
void Tree<T>::SetRoot(int rootId) {  //设置根节点
    root = GetTreeNode(rootId);
}

template<typename T>
void Tree<T>::AddChild(int parentId, int sonId) {  //连接父子
    TreeNode<T>* parentNode = GetTreeNode(parentId);
    TreeNode<T>* sonNOde = GetTreeNode(sonId);
    parentNode->addChild( sonNOde );
}

template<typename T>
void Tree<T>::AssignData(int nodeId, T data) {  //给节点赋值
    GetTreeNode(nodeId)->data = data;
}

template<typename T>
void Tree<T>::Print(TreeNode<T> *node) {
    if (node == NULL){
        node = root;
    }
    cout << node->data << ' ';
    ListNode< TreeNode<T>* > *tmp = node->childHead;
    while(tmp){
        Print(tmp->data);
        tmp = tmp->next;
    }
}

int main() {

    Tree<char> T(6);
    T.SetRoot(0);
    T.AssignData(0, 'a');  //节点添加值
    T.AssignData(1, 'b');
    T.AssignData(2, 'c');
    T.AssignData(3, 'd');
    T.AssignData(4, 'e');
    T.AssignData(5, 'f');

    T.AddChild(0, 2);
    T.AddChild(0, 1);
    T.AddChild(1, 3);
    T.AddChild(1, 4);


    T.Print();


    return 0;
}

输出

疑难杂症

https://chatgpt.com/share/6731dae1-5b54-800c-8ecd-4eebe00a91a7

https://chatgpt.com/share/67315d8d-46c0-800c-968b-822ae6337414


http://www.kler.cn/a/390531.html

相关文章:

  • GISBox VS ArcGIS:分别适用于大型和小型项目的两款GIS软件
  • 微信小程序=》基础=》常见问题=》性能总结
  • Xshell,Shell的相关介绍与Linux中的权限问题
  • 「数据要素」行业简报|2024.11.上刊
  • 第二节 OSI-物理层
  • Unity资源打包Addressable资源保存在项目中
  • spark的学习-04
  • 人工智能在智能家居中的应用
  • 【分布式事务】二、NET8分布式事务实践: DotNetCore.CAP 框架 、 消息队列(RabbitMQ)、 多类型数据库(MySql、MongoDB)
  • cmake同名无法创建(已解决,未深入探究)
  • Spring MVC 面试常问问题
  • 第三百二十一节 Java线程教程 - Java线程状态、Java原子变量
  • 2024.11最新Hexo+GitHub搭建个人博客
  • 网络安全渗透测试的相关理论和工具
  • dhcp和ftp
  • 设计模式之模版方法模式(Template)
  • 在CentOS下安装RabbitMQ
  • Nginx、Gateway的区别
  • TCP 三次握手意义及为什么是三次握手
  • 基于Testng + Playwright的H5自动化巡检工具
  • 【含文档】基于Springboot+Vue的生鲜团购系统 (含源码数据库+lw)
  • Arrays.sort与Collections.sort:深入解析Java中的排序算法
  • PySpark 数据处理实战:从基础操作到案例分析
  • 开源 - Ideal库 -获取特殊时间扩展方法(三)
  • MySQL 中单列索引与联合索引分析
  • SCI论文为何有“Online版”和“正式出版”?这两者有什么区别?