树和图的一些算法

 对于树

  遍历方法:

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

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

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

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;
    }
}
                                                                                                                

对于图

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

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

  

2.典型操作

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

 

posted @ 2018-10-15 22:53  懂得了才能做一些改变  阅读(300)  评论(0编辑  收藏  举报