您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# Python对称二叉树该如何理解
## 一、什么是对称二叉树
对称二叉树(Symmetric Binary Tree)是指一棵二叉树的左右子树在结构上呈现镜像对称的特性。具体表现为:
1. 根节点的左右子树互为镜像
2. 左子树的左子树与右子树的右子树对称
3. 左子树的右子树与右子树的左子树对称
示例对称二叉树:
1
/
2 2
/ \ /
3 4 4 3
## 二、Python实现对称二叉树的判断
### 方法一:递归解法
```python
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def isSymmetric(root: TreeNode) -> bool:
if not root:
return True
return compare(root.left, root.right)
def compare(left: TreeNode, right: TreeNode) -> bool:
if not left and not right:
return True
if not left or not right or left.val != right.val:
return False
return compare(left.left, right.right) and compare(left.right, right.left)
递归过程解析: 1. 基线条件:当两个节点都为空时返回True 2. 不对称条件:任一节点为空或节点值不等 3. 递归比较:左左vs右右,左右vs右左
from collections import deque
def isSymmetric_iterative(root: TreeNode) -> bool:
if not root:
return True
queue = deque([(root.left, root.right)])
while queue:
left, right = queue.popleft()
if not left and not right:
continue
if not left or not right or left.val != right.val:
return False
queue.append((left.left, right.right))
queue.append((left.right, right.left))
return True
迭代过程特点: - 使用队列代替系统调用栈 - 每次比较一对节点,并成对入队子节点 - 空间复杂度O(n),适合深度较大的树
方法 | 时间复杂度 | 空间复杂度 |
---|---|---|
递归 | O(n) | O(h) |
迭代 | O(n) | O(n) |
注:n为节点总数,h为树的高度
常见错误: 1. 忽略空节点情况导致NoneType错误 2. 错误比较左左vs左右(应为左左vs右右) 3. 递归终止条件不完整
调试建议:
# 打印树结构辅助调试
def print_tree(node, level=0):
if node:
print_tree(node.right, level + 1)
print(' ' * 4 * level + '->', node.val)
print_tree(node.left, level + 1)
推荐题目: - 101. 对称二叉树 - 100. 相同的树(变式练习) - 226. 翻转二叉树(关联概念)
理解对称二叉树的关键在于培养递归思维和镜像比较的能力,这是许多更复杂树结构算法的基础。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。