孩子兄弟表示法
目录
4.实验案例+核心代码+源码(写得有点繁琐,而且里面包括对文件的处理,应用场景不同)
1.孩子兄弟表示法介绍
孩子兄弟法可以将一般的树转化为二叉树处理。
任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,我们设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。
结点结构图如下表所示:
其中,data是数据域;firstchild为指针域,指向该结点的第一个孩子;rightsib是指针域,指向该结点的右兄弟。
这样说太抽象了,举个栗子:
我们从根结点来判断,还记得孩子兄弟法怎么表示的了吗?我们一一对应就好了。
所以根结点的firstchild指向 A结点 ,rightsib为null:
好,第一步完成之后,我们再来看看A
然后就是C和B依次判断,由于C和B的第一个孩子和右兄弟都不存在,都为null,所以之前的树用孩子兄弟法表示为:
2.孩子兄弟表示法特点
我们再来看看,这是一般的树:
孩子兄弟法表示树的结构图
好了,大家现在已经对孩子兄弟法有了基本的了解,你会发现它很容易找到一个结点的所有孩子结点 ,比如找到了结点F,看图你会发现F的下一层G、H、K都是F的孩子,所以我只需要遍历一下F的下一层就可以找到F结点的所有孩子结点。
但是,你会发现结点的双亲寻找起来变得困难,举个例子,如图,G指向H,那H的双亲结点是G吗,回到一般的树你会发现,这个G其实是虚假的双亲结点,H的真正双亲结点其实是F,是H结点的上一层中的某个结点,而不