leetcode100.相同的树
Posted 蔚尺丈八声
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode100.相同的树相关的知识,希望对你有一定的参考价值。
题目
参考:100. 相同的树
思路
关键点
1. 二叉树结点的类型
class TreeNode(object):
"""
二叉树的结点类型
属性:
val:int 根结点的值,默认为0
left:TreeNode 左孩子结点,默认为None
right:TreeNode 右孩子结点,默认为None
"""
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def __str__(self):
"""打印二叉树中的所有结点"""
return f'<{self.val}, {self.left}, {self.right}>'
2. 由树的双亲存储结构建立二叉树(层次遍历)
def build_tree(nodes):
"""构造一棵二叉树。
思路:
借助辅助队列,对输入的列表nodes构造二叉树。
步骤:
1.将nodes中第一个元素初始化为二叉树的根结点,并入辅助队列中。
2.辅助队列出队一个元素root,然后进入循环:
2.1.从左至右遍历nodes,每次遍历两个元素,第一个元素作为root的左孩子,第二个元素作为root的右孩。。
2.2.将root的左孩子、右孩子依次入辅助队列中。
2.3.一直循环2.1、2.2,直到nodes遍历结束。
参考:
Best way to construct a binary tree from a list in python:https://stackoverflow.com/questions/43097045/best-way-to-construct-a-binary-tree-from-a-list-in-python
参数:
nodes:list 装有数字的list,双亲存储结构,如nodes=[1,2]
返回值:
TreeNode 构建好的二叉树
异常:
StopIteration 对输入的列表,停止迭代时抛出的异常
"""
# 初始化
iter_p = iter(nodes)
tree = TreeNode(next(iter_p))
deque_node = deque([tree]) # 构造一个辅助队列(左出右进)
# 层次遍历输入列表,逐层构建二叉树
while True:
root = deque_node.popleft()
try:
# 从输入的列表中从左向右依次遍历两个元素,分别作为根结点root的左、右孩子
root.left = TreeNode(next(iter_p))
root.right = TreeNode(next(iter_p))
# 将root的左、右孩子依次入辅助队列中
deque_node.append(root.left)
deque_node.append(root.right)
except StopIteration:
break
return tree
参考:
3. 深度优先遍历(先序遍历,递归法)二叉树
def pre_order(root):
"""先序遍历二叉树(递归法)。
参数:
root:TreeNode 树的根结点
返回值:
无
"""
if root is None:
return
visit(root) # 访问根结点
pre_order(root.left) # 遍历左子树
pre_order(root.right) # 遍历右子树
参考:
参考
以上是关于leetcode100.相同的树的主要内容,如果未能解决你的问题,请参考以下文章