用递归和分治法思想,判断两个二叉树是否同构
时间: 2024-02-12 19:08:47 浏览: 89
C++基于递归和非递归算法判定两个二叉树结构是否完全相同(结构和数据都相同)
5星 · 资源好评率100%
判断两个二叉树是否同构可以使用递归和分治法思想,下面是两种实现方式:
1. 递归实现
递归实现的思路是分别判断两个二叉树的左子树和右子树是否同构,如果左右子树都同构,则判断两个二叉树的根节点是否相同。代码如下:
```python
def is_isomorphic(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return (is_isomorphic(root1.left, root2.left) and
is_isomorphic(root1.right, root2.right)) or \
(is_isomorphic(root1.left, root2.right) and
is_isomorphic(root1.right, root2.left))
```
2. 分治实现
分治实现的思路是将两个二叉树分别划分成左子树和右子树,然后递归判断左子树和右子树是否同构,最后判断两个二叉树的根节点是否相同。代码如下:
```python
def is_isomorphic(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return (is_isomorphic(root1.left, root2.left) and
is_isomorphic(root1.right, root2.right)) or \
(is_isomorphic(root1.left, root2.right) and
is_isomorphic(root1.right, root2.left))
def is_isomorphic_dc(root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
if root1.val != root2.val:
return False
return is_isomorphic_dc(root1.left, root2.left) and \
is_isomorphic_dc(root1.right, root2.right) and \
is_isomorphic_dc(root1.left, root2.right) and \
is_isomorphic_dc(root1.right, root2.left)
```
以上两种方法都可以判断两个二叉树是否同构,其中递归实现的代码比较简洁,分治实现的代码稍微复杂一些,但是思路清晰。
阅读全文