节点设计最重要了, 建议节点除了存储本人的信息之外, 一般存储双亲指针和第一个孩子的指针,和下一个兄弟的指针. 这样就可以很方便的实现你的功能.
1.第几代人
可以递归用双亲指针直到某个节点的双亲指针为空,记录递归次数,即是本人是第几代人.
2.双亲
本身存储了双亲指针,不用多说.
3. 兄弟姐妹分别是哪些人
找到双亲后,双亲的第一个孩子是当前节点最大的"大哥",按照"大哥"的下一个兄弟指针,依次可以遍历到所有的兄弟.
4. 堂兄弟姐妹
通过双亲的双亲找到爷爷,遍历爷爷的孩子且非当前节点双亲的所有孩子,即是堂兄弟姐妹
class Person
{
public:
string strName
public:
Person * pParent;
Person * pFirstChild;
Person * pNextBrother;
}