⽤vector数组实现树的存储(孩⼦表示法)c++

 在我们遇到的算法题中, ⼀般给出的树结构都是有编号的,这样会简化我们之后存储树的操作 ,⼀般提供两个信息;

  1. 结点的个数 n;
  2. n-1条x结点与y结点相连的边
题⽬描述:
⼀共 9 个结点셈 1 号结点为根节点,接下来 8 ⾏,每⾏两个数 x,   y, 表示x,   y 之间有⼀条边
输⼊格式:
9
3 1
1 2
4 1
2 5
6 2
7 4
4 8
4 9
我们观察下,它告诉我们两个数的时候,⽐如 3 1 之间有⼀条边,并没有告诉我们谁是⽗结点谁是孩⼦结点,虽然这道题⾥⾯我们知道1 是根结点, 1 就是⽗亲, 3 就是孩⼦,但是它每⾏告诉我们的顺序并没有⽗⼦关系,在看第5 ⾏的 2 5, 并不知道 2 是⽗亲还是 5 是⽗亲,所以这道题虽然告知了根结点,但是还是要当作⽆根数处理,因为我们基本上是看不出⽗⼦关系的。

接下来我们⽤vector数组来实现孩⼦表示法

1.创建⼀个⼤⼩⾜够的vector数组,vector edges[10 ];(注意这⾥是[]不是 (), 如果是 (), 相当于你创建了⼀个vector 数组且⾥⾯的空间为 10, 但是你写成[],相当于我们创建了 10 vector 数组) 其中 edges[ i ]⾥⾯就存着 i 号结点的所有孩⼦
2.对于i的孩⼦,直接edges[i].push_back
我们⽤图像来表示上⾯的话,模拟⼀下把左边的逻辑结构存到 edges 数组⾥⾯(⽐如 3 号下标⾥⾯的 vector数组,它以后要存储 6 号结点的孩⼦信息)

⽤vector数组实现树的存储(孩⼦表示法)c++_第1张图片

你可能感兴趣的:(数据结构,算法,c++)