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.相同的树的主要内容,如果未能解决你的问题,请参考以下文章

leetcode100:相同的树

leetcode 每日一题 100.相同的树

LeetCode-100-相同的树

leetcode100.相同的树

LeetCode 100 相同的树

⭐算法入门⭐《二叉树》简单02 —— LeetCode 100. 相同的树