判断一棵树是否为完全二叉树的算法c语言_【青云算法面试题】翻转等价的二叉树-LeetCode第951题...

fecee4775959ceabbf0c225bc70e2499.png

问题:在二叉树中选中一个节点并交换它的左右子树,称之为一个翻转操作。如果一棵二叉树X经过若干次翻转操作之后能够变成二叉树Y,那么二叉树X和Y是翻转等价的。请判断两棵二叉树是不是翻转等价。假设二叉树节点的值唯一。例如,我们翻转下图中左边二叉树节点1、3、5的左右子树,就得到了右边的二叉树,因此它们是翻转等价的。

e188d0e718a9ff85958e5b1d4dba5d15.png

分析:这是LeetCode的第951题。

按照题目中翻转等价的定义,如果两棵二叉树翻转等价,那么首先它们的根节点要相同。如果根节点不同,那么两棵二叉树一定不是翻转等价。

接下来看左右子树是否翻转等价。这里要分两种情况讨论。第一种可能是不用交换根节点的左右子树,此时分别判断第一棵树的左子树和第二棵树的左子树是否翻转等价,以及第一棵树的右子树和第二棵树的右子树是否翻转等价。第二种可能是需要交换根节点的左右子树,此时分别判断第一棵树的左子树和第二棵树的右子树是否翻转等价,以及第一棵树的右子树和第二棵树的左子树是否翻转等价。

怎么判断子树翻转等价?这和判断整棵树翻转等价是同一个问题,可以递归解决。参考代码如下:

be539cf3801376d41ec4d856396b7abd.png

由于需要遍历整棵树,因此时间复杂度是O(n),n为二叉树中节点的数目。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值