关键问题是解决怎么判断两个同为倒Y形状的二叉树同构
A B
C D E F
如上图,怎么判断这两棵同构?
如果C在右边EF里面找到了同构,D再和EF的另一个匹配成功,就说明这两棵树同构。
实现:用栈存放两棵树上遍历指针指向的度均为2的节点,以及该节点下的子树(无分左右)被访问了几次,以及每次访问子树传回来的子树同构布尔值。这样,重复访问同一Y形节点就能区分开了,而且每一次访问子树都会向该Y形点传回bool,根据次数和bool就能很好的实现这种节点行为的
树状图(仔细一想,其实都是在围绕树状图展开,树状图需要什么,就增加对应的条件)
status is_omorphism2(BiTree t1, BiTree t2) {
/*感想:本递归步骤关键在层与层之间交换信息,这个信息就是同构的布尔值,
最核心的问题是如何实现两个倒Y形二叉树之间的匹配问题,需要画出树状图}
*/
sqStack<::tuple<::tuple<BiTNode*, BiTNode*>, sqStack<bool>>> sqs;
initStack(sqs);
::tuple<BiTNode*, BiTNode*> traPtr = { t1,t2 };//遍历指针,允许为空
::tuple<::tuple<BiTNode*, BiTNode*>