首页 > 其他分享 >12月21日总结

12月21日总结

时间:2025-01-10 19:26:37浏览次数:1  
标签:总结 遍历 21 递归 右子 12 搜索 节点 指针

概念上,树是一种非线性的数据结构,它由节点(node)组成,有一个特殊的节点被称为根节点(root),从根节点开始,通过分支连接子节点,子节点又可以有自己的子节点,如此层层嵌套,形成类似现实世界中树的形状,只不过是倒置的,根节点在最上方。树具有层级性,根节点为第 0 层,往下依次递增。节点的度(degree)指的是该节点拥有的子节点数量,树的度则是节点中度的最大值。
学习树的基本操作时,遍历是重点内容之一。常见的遍历方式有前序遍历、中序遍历和后序遍历,它们都基于深度优先搜索(DFS)策略。前序遍历是先访问根节点,再递归遍历左子树,最后递归遍历右子树,其顺序为根 - 左 - 右,能快速获取根节点信息并按层次展开;中序遍历是先递归遍历左子树,再访问根节点,最后递归遍历右子树,即左 - 根 - 右,对于二叉搜索树,这种遍历方式能得到有序的数据序列;后序遍历为先递归遍历左子树,再递归遍历右子树,最后访问根节点,顺序是左 - 右 - 根,常用于一些需要先处理子节点再汇总到根节点的场景,如计算树的高度、释放树的内存等。
除了深度优先搜索,还有广度优先搜索(BFS),它借助队列实现,从根节点开始,逐层将节点加入队列,再依次取出并访问节点及其子节点,这种方式能按层序遍历树,清晰展现树的层级结构。
在树的构建方面,根据不同应用场景有多种方法。对于二叉树,可以通过给定的节点值序列,按照特定遍历规则来构建,过程中要注意节点指针的正确赋值,防止出现悬空指针或错误连接。
实践过程中遇到诸多挑战。由于树的结构复杂,指针操作频繁,容易出现内存泄漏、指针指向错误等问题,调试难度较大。在实现遍历算法时,递归函数的边界条件和递归逻辑容易混淆,导致栈溢出或遍历不完全。另外,对于一些复杂的树变形问题,如将二叉树转换为双向链表,难以把握转换规则和节点指针调整策略。
明日计划深入学习特殊类型的树,如二叉搜索树的插入、删除、查找等操作,进一步巩固树的基础知识,通过更多实例练习提升对树结构的运用能力,为解决更复杂的数据结构难题奠定基础。

标签:总结,遍历,21,递归,右子,12,搜索,节点,指针
From: https://www.cnblogs.com/Genghao11/p/18664538

相关文章

  • 12月23日总结
    今日学习了二叉树的相关操作:一、遍历操作深度优先遍历:前序遍历(根-左-右):递归实现:从根节点开始,首先访问根节点,然后递归地对左子树进行前序遍历,最后递归地对右子树进行前序遍历。示例代码如下(以C语言为例):typedefstructTreeNode{intval;structTreeNode*left;struc......
  • 12月24日总结
    今日踏入数据结构中“图”的奇妙世界,相较于之前学习的线性结构和树结构,图更为复杂且充满多样性,带来了全新的知识挑战与思维拓展。概念上,图由顶点(vertex)和边(edge)组成,顶点代表图中的节点,边则用于连接这些顶点,体现它们之间的关系。根据边是否有方向,图可分为有向图和无向图。有向图......
  • 12月25日总结
    今日主要学习了图的两种遍历方法:深度优先遍历和广度优先遍历深度优先搜索(DFS)include<stdio.h>include<stdlib.h>defineMAX_VERTICES100//图的结构体,使用邻接表存储typedefstructGraph{intnumVertices;structAdjListNode**adjLists;int*visited;}Graph;//......
  • 12月26日总结
    今日主要学习了图中寻找最短路径的算法:迪杰斯特拉算法和弗洛伊德算法迪杰斯特拉算法:include<stdio.h>include<stdlib.h>include<limits.h>include<stdbool.h>//找到未确定最短路径的顶点中距离源点最近的顶点intminDistance(intdist[],boolsptSet[],intnumVerti......
  • 12月17日每日总结
    今日主要学习了图中寻找最小生成树的算法:克鲁斯卡尔算法和普利姆算法克鲁斯卡尔算法:构建边结构体:用于存储图中的边信息,包括边的两个端点以及边的权值。typedefstructEdge{intsrc;intdest;intweight;}Edge;对边进行排序:可以使用C语言标准库中的qsort函数来实现......
  • vscode配latex,用于latex排版,花了几个小时终于研究明白了(已总结)
    掉坑里了,切记texlive必须要安装,不然就是下面这样子步骤一:texlive安装链接:https://mirrors.tuna.tsinghua.edu.cn/CTAN/systems/texlive/Images/下载完后双击ISO文件,再双击install-tl-windows.bat双击install-tl-windows.bat之后会自动跳转1-2个页面到下面这个页面......
  • 12月25日
    泛型的类型参数泛型的类型参数可以是任何有效的Java类型,但不能是基本数据类型。可以使用类、接口或自定义类型作为类型参数。类型参数的限制可以使用extends关键字对类型参数进行限制,表示类型参数必须是某个类的子类或实现某个接口的类。例如:javapublicclassBox{private......
  • 12月20日总结
    今日学习了队列的相关操作:定义:defineMAX_SIZE100//假设队列最大容量为100typedefstructQueue{intdata[MAX_SIZE];intfront;intrear;}Queue;初始化:voidinitQueue(Queue*q){q->front=0;q->rear=0;}入队操作:voidenqueue(Queue*q,intvalue){i......
  • 2024-12-1-#{}与¥{}的区别-response
    {}与¥{}的区别response实现重定向response响应字符数据response响应字节数据以及导入工具类实现响应......
  • 12月14日总结
    今日学习了,单链表的基本操作:定义:typedefstructListNode{intdata;structListNode*next;}ListNode;初始化:voidinsertAtHead(ListNode**head,intvalue){ListNode*newNode=(ListNode*)malloc(sizeof(ListNode));newNode->data=value;......