二叉树实现按层 s型打印

2023-10-27

题目阐释:

s型打印,重要的是将binary—tree 逐层遍历,获取每层的node。

思路:

将树的遍历转化为 压栈出栈。 每次将列表内的node全部出栈,获取子元素,然后全部再入栈。 如此反复迭代

应用:

当树有层次信息时候,可以如此操作。

代码如下:

class Node(object):
    def __init__(self, val):
        self.left_node = None
        self.right_node = None
        self.value = val


class MakeNode(object):
    def __init__(self):
        pass

    def make_series(self, root_val, value_list_in):
        root = Node(root_val)
        # cur_node=root
        cur_nodes = list()
        cur_nodes.append(root)
        while cur_nodes:
            nodes_iters = list()
            while cur_nodes:
                cur_node = cur_nodes.pop(0)
                nodes_iters.append(cur_node)
            for node_iter in nodes_iters:
                if value_list_in:
                    values_iter = value_list_in.pop(0)
                    if values_iter[0]:
                        node = Node(values_iter[0])
                        node_iter.left_node = node
                        cur_nodes.append(node)
                    if values_iter[1]:
                        node = Node(values_iter[1])
                        node_iter.right_node = node
                        cur_nodes.append(node)
        # print(root)
        return root


class BinaryTree(object):
    def __init__(self):
        pass
    def stack(self,root):
        nodes=[root]
        flag=0
        while nodes:
            nodes_tmp=list()
            while nodes:
                nodes_tmp.append(nodes.pop(0))
            # print('nodes_tmp==>',nodes_tmp)
            if flag%2==0:
                nodes_print=nodes_tmp
            else:
                nodes_print=nodes_tmp[::-1]
            for val_node in nodes_print:
                if val_node:
                    print(val_node.value)
            for node_iter in nodes_tmp:
                if node_iter:
                    # print(node_iter.value)
                    nodes.extend([node_iter.left_node,node_iter.right_node])
            flag+=1



if __name__ == '__main__':
    root = 1
    values = [[2,3], [4, 5], [6, 7], [8, 9], [10, 11], [12, None], [None, 13]]
    mn = MakeNode()
    root=mn.make_series(root, values)
    bt=BinaryTree()
    bt.stack(root)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

二叉树实现按层 s型打印 的相关文章

随机推荐

  • linux时间校准步骤记录

    记录一下校准时间操作的执行步骤 首先使用 date 查看当前时间是否准确 校准时间命令 ntpdate cn pool ntp org 如果没有权限 sudo i 会出现输入密码 直接输入密码即可 再次执行校准时间操作命令 ntpdate
  • qt TCP接收数据遇到的问题

    项目负责利用TCP来传输一组大的数据 然后在接收函数里将接收的数组进行解包赋值 从结果来看发现解包出来的数据都是错误的 几乎都是随机并且好几个值是负无穷 这里就发现了QT的TCP传输机制 它将我的数据分两次接收 每一次是原来的一半 例如我传
  • 98. Validate Binary Search Tree 解题记录

    题目描述 Given a binary tree determine if it is a valid binary search tree BST Assume a BST is defined as follows The left s
  • 基于 session 和基于 token 的用户认证方式到底该如何选择

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 现在貌似大多数网站用户认证都是基于 session 的 即在服务端生成用户相关的 session 数据 而发给客户端 sesssion id 存放到 cookie 中 这样
  • beyond compare使用

    灰色 在自己定义的比较标准下比较 完全相同 红色 在自己定义的比较标准下比较 不相同 蓝色 在自己定义的比较标准下 蓝色的文件为多出来的文件 2012 10 15
  • 微信小程序quickstartFunctions中云函数的应用

    1 在quickstartFunctions文件中新建文件夹和文件 2 index js 文件书写 const cloud require wx server sdk cloud init env cloud DYNAMIC CURRENT
  • dbeaver导出建表语句_常用SQL语句(时常修改)

    咱们在开发中有很多的sql 是不好写的 写完了 还总容易出问题 所以从现在开始总结 这些SQL语句 2019 01 09更新 这个问题是因为做设计的时候忘了数据的唯一的问题 导致数据出现重复 查询的时候出现了查询的selectOne变成se
  • Sencha的Eclipse插件提示和技巧

    原文 http www sencha com blog sencha eclipse plugin tips tricks Sencha的Eclipse插件是一个完整的用于流行的Eclipse IDE的代码辅助和验证插件 有了该插件 就可以
  • lol数据英雄联盟接口LOL接口电竞api开发比分网分享@

    英雄联盟数据LOL接口电竞api开发比分网分享 TOC 数据来自marz数据alan marzesport com 各大赛区的lol数据都有 1 获取赛事 接口 host1 api series 9870 示例 赛事相关接口 begin a
  • Vmware虚拟机网络模式原理及配置详解

    概述 VMware为我们提供了三种网络工作模式 它们分别是 bridged 桥接模式 host only 仅主机模式 nat 网络地址转换模式 打开VMware Workstation 我们可以在选项栏的 编辑 下的 虚拟网络编辑器 中看到
  • 915. 分割数组-动态规划算法

    915 分割数组 动态规划算法 给定一个数组 nums 将其划分为两个连续子数组 left 和 right 使得 left 中的每个元素都小于或等于 right 中的每个元素 left 和 right 都是非空的 left 的长度要尽可能小
  • 跨境做独立站,如何低成本引流?你的流量密码在这

    大家都知道 海外的消费习惯与国内不同 独立站一向是海外消费者的最喜欢的购物方式之一 这也吸引了许多跨境商家开设独立站 独立站不同于其他的第三方平台 其他平台可以靠平台自身流量来获得转化 而独立站本身没有流量 需要卖家从各大社媒平台进行自主引
  • 史上最牛独立开发者:花20美元狂赚100万美元

    Joe Kaufman 是一个名副其实的独立开发者 只有一个同伴 他一人处理所有的设计 美术 动画 尽管如此 他的游戏还是获得了巨大成功 Grisly Manor 恐怖庄园的秘密 的下载量已达400万 Lost City 失落之城 的也已经
  • 如何统计Visual Studio Code项目的代码行数

    背景 年底到了 公司一年一度做述职报告的时间又到了 每到此时小伙伴们都想方设法的去做一些代码层面的汇总 在此交给大家个小妙招 走过路过不要错过哈 解决方案 使用Visual Studio Code自带的在文件中查找功能中的正则表达式实现代码
  • Android新手入门 FAQ

    Q 什么是Android A Android一词的本义指 机器人 同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称 该平台由操作系统 中间件 用户界面和应用软件组成 号称是首个为移动终端打造的真正开
  • Openstack Qos

    Openstack network qos 1 配置QOS 此处网络为provider网络 无self server网络 无L3 只有控制节点和计算节点 控制节点上 vim etc neutron neutron conf service
  • 立体匹配 -- PSM-Net 网络模型代码剖析

    只熟悉流程跑通代码不重要 重要的是理解网络的思想 GC Net提出了3D CNN编解码的形式做 cost volum 后处理的过程 PSM Net 加入图像金字塔的模块结合3D CNN 输出图像视差图 一 特征提取模块 作者用 3层 33的
  • 2023华为OD机试真题【组装数组】

    题目描述 给你一个整数M和数组N N中的元素为连续整数 要求根据N中的元素组装成新的数组R 组装规则 1 R中元素总和加起来等于M 2 R中的元素可以从N中重复选取 3 R中的元素最多只能有1个不在N中 且比N中的数字都要小 不能为负数 输
  • SpringBoot实现原理

    一 什么是SpringBoot SpringBoot是一个快速开发框架 快速的将一些常用的第三方依赖整合 原理 通过Maven子父工程的方式 简化XML配置 全部采用注解形式 内置Http服务器 Jetty和Tomcat 最终以java应用
  • 二叉树实现按层 s型打印

    题目阐释 s型打印 重要的是将binary tree 逐层遍历 获取每层的node 思路 将树的遍历转化为 压栈出栈 每次将列表内的node全部出栈 获取子元素 然后全部再入栈 如此反复迭代 应用 当树有层次信息时候 可以如此操作 代码如下