二叉树判断同构的非递归算法

本文探讨如何判断两个倒Y形状的二叉树是否同构,重点在于提出非递归的解决方案。
摘要由CSDN通过智能技术生成

关键问题是解决怎么判断两个同为倒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*>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值