七。图

一.图相关

1.图本质上可以认为是多叉树的延伸。面试笔试中很少出现图问题,就算有,也是简单的遍历问题,基本上可以完全照搬多叉树的遍历

 1     //基本的N叉树节点
 2     class TreeNode{
 3         int val;
 4         TreeNode[] children;
 5     }
 6     //图节点的逻辑结构
 7     class Vertex{
 8         int val;
 9         Vertex[] neighbors;
10     }

2.图的逻辑结构的具体实现

(1)逻辑结构:由节点构成

(2)具体实现:邻接表,邻接矩阵(很少用Vertex类来实现)

邻接表:把每个节点n的邻居都存到一个列表里,然后把n和这个列表关联起来,这样就可以通过一个节点n找到它的所有相邻节点

邻接矩阵:是一个二维布尔数组matrix

3.分类:

有向图,无向图。无权图,加权图。

4.图的遍历

(1)多叉树的遍历(前序遍历,后序遍历)

1     //前序遍历
2     public void traverse(TreeNode root) {
3         if(root==null)
4             return;
5         res.add(root.val);
6         for(TreeNode node : root.children) {
7             traverse(node);         //递归遍历每一个子树
8         }
9     }

N429多叉树的层序遍历:(多叉树比较特殊,根节点不在数组里面,但不影响,因为就是从根节点开始遍历的,根引用直接指向了根节点)

(2)图和多叉树的最大区别就是:图是可能包含环的,从某一节点开始遍历,可能又回到这个节点

    所以,如果图包含环,遍历框架就需要一个visited数组进行辅助

原文地址:https://www.cnblogs.com/midiyu/p/15416751.html