当前位置:实例文章 » 其他实例» [文章]代码随想录第十五天|层序遍历、翻转二叉树、对称二叉树

代码随想录第十五天|层序遍历、翻转二叉树、对称二叉树

发布人:shili8 发布时间:2024-11-11 03:22 阅读次数:0

**代码随想录第十五天**

今天我们将讨论三道经典的算法题目:层序遍历、二叉树翻转和对称二叉树。

### 一、层序遍历层序遍历(Breadth-First Search,BFS)是指从根结点开始,依次访问每一层的所有结点。这种遍历方式适用于需要按层次访问结点的场景。

####代码示例

from collections import dequeclass TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef levelOrder(root):
 if not root:
 return []

 result = []
 queue = deque([root])

 while queue:
 level = []
 for _ in range(len(queue)):
 node = queue.popleft()
 level.append(node.val)
 if node.left:
 queue.append(node.left)
 if node.right:
 queue.append(node.right)

 result.append(level)

 return result

####代码注释* 我们首先检查根结点是否为空。如果是,则直接返回一个空列表。
* 初始化结果列表和队列,分别用于存储每一层的值和结点。
* 进入循环直到队列为空。
* 每次循环中,我们首先创建一个新列表来存储当前层的值,然后遍历队列,取出结点并将其值添加到列表中。如果结点有左或右孩子,则将它们添加到队列中。
* 最后,将当前层的值添加到结果列表中。

### 二、翻转二叉树翻转二叉树是指交换每个结点的左右子树。这种操作可以用于创建新的二叉树或修改原有的二叉树结构。

####代码示例
class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef invertTree(root):
 if not root:
 return None # 交换左右子树 root.left, root.right = root.right, root.left # 递归交换左、右子树的左右子树 invertTree(root.left)
 invertTree(root.right)

 return root

####代码注释* 我们首先检查根结点是否为空。如果是,则直接返回 None。
* 交换根结点的左右子树。
* 递归交换左、右子树的左右子树。

### 三、对称二叉树对称二叉树是指每个结点的左右子树都是镜像对称的。这种结构可以用于创建新的二叉树或修改原有的二叉树结构。

####代码示例
class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef isSymmetric(root):
 if not root:
 return True # 递归检查左右子树是否对称 return isMirror(root.left, root.right)

def isMirror(left, right):
 if not left and not right:
 return True if not left or not right:
 return False # 检查左、右子树的值和结构是否相等 return (left.val == right.val) and 
 isMirror(left.left, right.right) and 
 isMirror(left.right, right.left)

####代码注释* 我们首先检查根结点是否为空。如果是,则直接返回 True。
* 递归检查左右子树是否对称。
* 检查左、右子树的值和结构是否相等。

以上就是今天我们讨论的三道经典算法题目:层序遍历、二叉树翻转和对称二叉树。这些题目可以帮助你提高对数据结构和算法的理解,特别是在处理二叉树时。

相关标签:运维linux服务器
其他信息

其他资源

Top