给定一棵 n 个节点的树,树的根节点固定为 1
。我们有两种方式表示树的结构:
u v
表示节点 u
和节点 v
之间存在一条边。father[i]
表示节点 i
的父节点。通过【图论的存储】图的存储,我们可以学会怎么把图存进邻接表且怎么遍历。树的存储和遍历其实本质是一样的,因为树就是无环图。
第一种情况
读入方式:读入方式与【图论的存储】图的存储 一致。注意一定要按无向图的方式双向边读入!比如说根节点是1,存在一条边1 -> 2 .但是实际数据中可能是
2 1
. 需要按无向图的方式读入来保证能处理这种情况。遍历方式:在遍历时我们要转换为有向的结构。即,当你从父节点访问某个子节点后,不应该回到父节点。为此,你需要在DFS的时候额外加一个参数:
father
,当要访问的下一个节点 == father 时,不返祖递归。否则这样会进入DFS死循环。