zoukankan      html  css  js  c++  java
  • 七。图

    一.图相关

    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数组进行辅助

  • 相关阅读:
    四种方案解决ScrollView嵌套ListView问题
    [Android Bug] ListView中Header, Footer无法隐藏(gone)的问题
    Mysql介绍,与将脚本导入新数据库
    000 SpringBoot属性配置
    navicat的安装
    gradle
    004 Numpy
    003 Scipy库简介
    Mysql安装(绿色版安装)
    010 secondary namenode(同步元数据和日志)
  • 原文地址:https://www.cnblogs.com/midiyu/p/15416751.html
Copyright © 2011-2022 走看看