树和图的一些算法

 对于树

  遍历方法:

  1.递归遍历,而递归遍历又分为前序,中序,后续三种,这样概率清晰之后还是很容易理解的。其中层次遍历我们按照树结构,很容易给出树的遍历方法,但是用程序语言去描述这个过程,要充分应用这种结构。

复制代码
public void traval(TreeNode node){
    if(node == null) {return ;}
    // 先根
    print(node);
  // 树结构具有重复自身的特性 travel(node.left); travel(node.right); }
//
复制代码

  2、层次遍历:相较而言,层次遍历就不是那么好理解了,需要额外的数据结构,来存储访问节点。在程序中需要开辟一个线性表存储。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public void bfs(TreeNode node){
  print(node.val);
  // 子树,第二层
      print(node.left);
      print(node.right);
     List list;
      list.add(node.left);
     list.add(node.right);
     
  while(list.size()>0){ 
         List list2;
    for(Node node list){
     
                print(node.left);
                print(node.next);
                if(node.left!=null){
                             
                   list2.add(node.left);
               }
               if(node.right !=null){
                   list2.add(node.right);
                }
  }
          list = list2;
    }
}
                                                                                                                

对于图

 图比树复杂,可以从存储分类,也可以从是否有向,是否修改等维度分类。

1
2
3
拓扑图可以这样表示,只关注位置,不关注路径权重
0->1,0->2,1->3,2->3
graph = [[1,2],[3],[3],[]]<br>// 这样的图,如何进行图的深度遍历呢?<br><br>

  

2.典型操作

  在某种更加广泛的视野上,树也是图的一种特殊子类。在很多应用中,我们需要判断图中是否存在环。如果存在环,我们走迷宫很可能就走不出来了。类似的,如何判断链表中存在环,这个问题就简单多了。

 

posted @   懂得了才能做一些改变  阅读(306)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示