树和图的一些算法
对于树
遍历方法:
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.典型操作
在某种更加广泛的视野上,树也是图的一种特殊子类。在很多应用中,我们需要判断图中是否存在环。如果存在环,我们走迷宫很可能就走不出来了。类似的,如何判断链表中存在环,这个问题就简单多了。
日进有功