二叉树层次遍历的两种写法

这篇具有很好参考价值的文章主要介绍了二叉树层次遍历的两种写法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

import collections


class BiTree(object):
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right


def nums_to_tree(nums):
    if not nums:
        return None
    queue = collections.deque()
    root = BiTree(nums[0])
    queue.append(root)
    i = 1
    while i < len(nums):
        node = queue.popleft()
        if i < len(nums) and nums[i] != -1:
            node.left = BiTree(nums[i])
            queue.append(node.left)
        i += 1

        if i < len(nums) and nums[i] != -1:
            node.right = BiTree(nums[i])
            queue.append(node.right)
        i += 1

    return root

# 层次遍历
# def level_sort(root):
#     if not root:
#         return None
#     queue = collections.deque()
#     queue.append(root)
#     while len(queue) > 0:  # 只要队不空,出队一个元素,并访问他的孩子节点
#         node = queue.popleft()
#         print(node.val, end="")
#         if node.left:
#             queue.append(node.left)
#         if node.right:
#             queue.append(node.right)


# 层次遍历
def level_sort(root):
    if not root:
        return None
    queue = collections.deque()
    queue.append(root)
    res = []
    while len(queue) > 0:  # 只要队不空,出队一个元素,并访问他的孩子节点
        temp = []
        for i in range(len(queue)):
            node = queue.popleft()
            temp.append(node.val)
            if node.left:
                queue.append(node.left)
            if node.right:
                queue.append(node.right)
        res.append(temp)
    print(res)


# 输入 1 null 1 null 1 2
#    1
#  /  \
# null  1
#      /  \
#   null  1
#        /
#       2
if __name__ == '__main__':
    nums = ['1', 'null', '1', 'null', '1', '2']
    nums = [int(i) if i != "null" else -1 for i in nums]
    root = nums_to_tree(nums)
    level_sort(root)

文章来源地址https://www.toymoban.com/news/detail-686347.html

到了这里,关于二叉树层次遍历的两种写法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 二叉树创建的两种方法(图解)

            目录 一、括号表示法 (1)括号表示法构建二叉树的算法思路及算法实现 (2)图解括号表示法构建二叉树 (3)测试程序  二、扩展二叉树 (1)扩展二叉树构建二叉树的算法思路及算法实现 (2)测试程序         二叉树的创建方法有很多种,在这里我介绍两种

    2024年02月06日
    浏览(54)
  • 122 解二叉树的右视图的两种方式

    问题描述:给定一颗二叉树,想想自己站在他的右侧,按照从底部到底部的顺序,饭后从右侧所能看到的节点值。 BFS方式求解,每一层只保留最后一个节点即可。 DFS方法求解:采用先序遍历的方式,不过在访问玩当前结点之后,需要下一个递归是先从右节点开始,记录所有的

    2024年01月20日
    浏览(38)
  • 数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q

    目录     二叉树的定义: *特殊的二叉树:  二叉树的性质:  二叉树的声明:   二叉树的先序遍历:  二叉树的中序遍历:  二叉树的后序遍历: 二叉树的层序遍历:  二叉树的节点个数: 二叉树叶节点个数:   最后完整代码: 运行结果:  二叉树是n(n≥0)个结点的

    2024年02月01日
    浏览(41)
  • python带参数装饰器的两种写法

    装饰器是 Python 中非常有用的语法特性,可以用于包装或者修改函数的行为。有时候我们希望给装饰器添加参数,以便于在装饰器内部使用,那么这时候就需要使用带参数的装饰器。常用的两种带参数装饰器的写法如下: 在装饰器函数外层再套一个函数,用来接收和处理装饰

    2024年02月13日
    浏览(36)
  • 【算法训练-二叉树 一】【遍历二叉树】前序遍历、中序遍历、后续遍历、层序遍历、锯齿形层序遍历、二叉树右视图

    废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是【二叉树的遍历】,使用【二叉树】这个基本的数据结构来实现,这个高频题的站点是: CodeTop ,筛选条件为: 目标公司+最近一年+出现频率排序 ,由高到低的去 牛客TOP101 去找,只有两

    2024年02月07日
    浏览(42)
  • 算法D14 | 二叉树1 | 144. 二叉树的前序遍历 145. 二叉树的后序遍历 94. 二叉树的中序遍历

    理论基础  需要了解 二叉树的种类,存储方式,遍历方式 以及二叉树的定义  文章讲解: 二叉树既可以链式存储(利用指针,类似栈和队列),也可以用数组表示。 深度优先遍历 前序遍历(递归法,迭代法) 中序遍历(递归法,迭代法) 后序遍历(递归法,迭代法)

    2024年02月20日
    浏览(38)
  • 二叉树遍历非递归算法

    •三种遍历 ​ • 先序遍历: 根节点–左子树–右子树 ​ • 中序遍历: 左子树–根节点–右子树 ​ • 后序遍历: 左子树–右子树–根节点 •两类算法 ​ • 递归算法(具体看我上一篇文章) ​ ♥直观,易读 ​ ♥效率低下 ​ • 非递归算法 ​ ♥ 如果一个算法可以使用递归

    2024年02月04日
    浏览(46)
  • 二叉树的非递归遍历算法

    二叉树的遍历是指访问二叉树的每个结点,且每个结点仅被访问一次。二叉树的遍历可按二叉树的构成以及访问结点的顺序分为4种方式:先序遍历、中序遍历、后序遍历和层次遍历。请至少给出其中一种遍历方式的非递归算法的思路和代码,并举例演示算法的执行过程。 算

    2023年04月24日
    浏览(41)
  • 算法刷题Day 15 二叉树的层序遍历+翻转二叉树+对称二叉树

    层序遍历二叉树需要借助到队列 递归方法 迭代方法 就是简单的用上前序遍历迭代方法实现,不用想的太复杂 递归方法 迭代方法 这里使用了队列来存放两个要比较的结点。也可以使用栈,方法是类似的。

    2024年02月12日
    浏览(43)
  • 二叉树遍历之中序遍历算法(非递归、递归)入门详解

    一、引言 二叉树的遍历常见的方法有先序遍历、中序遍历、后序遍历和层次遍历等,本文给出了C语言版本的中序遍历二叉树的非递归算法和递归算法。 中序遍历的原理很简单,也就是把树根的访问放在中间。访问结点的次序是:“左—根—右”,也就是首先访问左子树,之

    2024年02月06日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包