将二叉树转换为排序数组

2024-04-15

有没有一种方法可以将二进制转换为排序数组,而不必遍历树来查找每个数组索引?

Node root;
Node runner;
int current_smallest;

void findsmallest(Node root){
    //Pre-order traversal
    if(root == null){
        return;
    }else{
        runner = root;
        if(current_smallest == null){
            current_smallest = runner.element;
        }else{
            if(current_smallest > runner.element){
            current_smallest = runner.element;
            }
        }
        findsmallest(runner.left);
        findsmallest(runner.right);
    }   
}

void fill_array( int [] array ){

    for(int i =0; i < array.length(); i++){
        findsmallest(root);
        array[i] = current_smallest;
    }
} 

正如您所看到的,如果树中有很多节点,这可能需要很长时间。 顺便说一句,我忘记表明必须在开始时遍历整棵树才能获取数组的长度。


是的,你可以这样做:运行中序遍历 http://en.wikipedia.org/wiki/Tree_traversal#In-order树的当前位置,保留数组的当前位置,并将节点的值存储在数组的当前位置。

您可以递归地进行中序遍历,也可以使用堆栈数据结构来进行。如果你想递归地执行,你可以这样做:

int fill_array(Node root, int [] array, int pos) {
    if (root.left != null) {
        pos = fill_array(root.left, array, pos);
    }
    array[pos++] = root.element;
    if (root.right != null) {
        pos = fill_array(root.right, array, pos);
    }
    return pos; // return the last position filled in by this invocation
}

请注意,为了使上述递归过程正常工作,调用者必须在递归过程中分配足够的空间array传递到函数中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将二叉树转换为排序数组 的相关文章

  • 如何使用 SQL Server 查询对“版本号”列进行排序

    我想知道我们当中的 SQL 天才是否可以向我伸出援助之手 我有一个专栏VersionNo在表中Versions包含 版本号 值 例如 VersionNo 1 2 3 1 1 10 3 1 1 4 7 2 etc 我正在寻找对此进行排序 但不
  • 重构——套接字中的良好实践——简单的服务器-客户端 Swing 应用程序

    我使用单例和观察者模式编写了一个带有 Swing 接口的简单服务器 客户端程序 每个客户端都连接到服务器并可以发送消息 服务器将其收到的消息转发给其余的客户端 客户端使用 GUI 允许它们随时连接和断开与服务器的连接 该程序运行得很好 因为
  • 以点作为分隔符分割字符串

    我想知道我是否要在一个字符串上分割字符串 正确的方式 我的代码是 String fn filename split return fn 0 我只需要字符串的第一部分 这就是我返回第一项的原因 我问这个是因为我在 API 中注意到 意味着任何
  • 如何在数据库中对 (Java) 枚举进行建模(使用 SQL92)

    您好 我正在使用名为 性别 的列对实体进行建模 在应用程序代码中 性别应该是一个 Java 枚举类型 有 2 个值 男性和女性 知道作为数据类型的枚举不是通用 SQL 语言 92 的一部分 您将如何建模它 数据模型必须是可移植的 以便由多个
  • 如何在Mac上使用eclipse安装jetty

    我是一个新手 jetty 和 RESTful API 我想使用 Jetty 创建 REST 服务 并希望将嵌入式 jetty 与 eclipse 一起使用 任何人都可以建议我在 Mac OS 中使用 Eclipse 安装 Jetty Jet
  • WebLogic 10 中的临时目录

    每当 WL 停止时 它都不会删除其临时目录 即 domains mydomain servers myserver tmp WL TEMP APP DOWNLOADS domains mydomain servers myserver tm
  • FFmpeg 不适用于 android 10,直接进入 onFailure(String message) 并显示空消息

    我在我的一个项目中使用 FFmpeg 进行视频压缩 在 Android 10 Google Pixel 3a 上 对于发送执行的任何命令 它会直接进入 onFailure String message 并显示空消息 所以我在我的应用程序 g
  • 为什么一个线程会中断另一个线程[重复]

    这个问题在这里已经有答案了 在Java多线程应用程序中 我们处理InterruptedThreadException 如果另一个线程中断当前线程 则会抛出此异常 现在 当另一个线程知道它将导致异常时 它可能想要中断当前线程的原因是什么 很多
  • 如何屏蔽 Protobuf 中的某些字段

    我找不到一种方法来屏蔽 protobuf 结构中的某些字段 我确实阅读了有关 FieldMaskUtil 的内容并尝试了几个示例 但它似乎做了相反的操作 即复制 FieldMask 中提到的字段 这与我想要的不同 这是示例结构和相应的测试代
  • 使用 firebase 按最新消息对聊天列表进行排序

    我不知道为什么我陷入了一个问题chatList不按最后一条消息时间或最新消息排序 我尝试过存储timestamp在数据库中和订单子依据时间戳 但它仍然不起作用 不起作用意味着列表不会在每条消息后排序 并继续将列表显示为在第一条消息后排序 看
  • Java 中 static 关键字如何工作?

    我正在阅读Java教程 http docs oracle com javase tutorial index html从一开始我就有一个问题static字段或变量上的关键字 作为Java said here http docs oracle
  • 尝试在空对象引用上调用虚拟方法“java.lang.String org.jsoup.nodes.Element.ownText()”

    我正在使用下面的代码来获取版本名称 from 应用商店通过使用 jsoup 我正在获取详细信息 但它引发了一些异常 我的代码是 public class ForceUpdateAsync extends AsyncTask
  • 如何列出所有可用的 LookAndFeel 主题?

    如何列出所有可用的 LookAndFeel 主题 我想在 JComboBox 中显示以供用户选择 这真的很简单 public static UIManager LookAndFeelInfo getInstalledLookAndFeels
  • 如何在 Java 中创建要打印到 JFrame 的 JLabels 数组

    我正在尝试制作一系列标签 每个标签都有一个来自函数的不同值 我不知道要使用的标签的确切数量 我的意思是可以打印任意数量的值 请帮我做这件事 很简单 只需一个方法返回一个数组或一些 JLabels 集合 并将它们全部添加到您的 JCompon
  • 无法仅在控制台中启动 androidstudio

    你好 我的问题是下一个 我下载了Android Studio如果我去 路径 android studio bin 我执行studio sh 我收到以下错误 No JDK found Please validate either STUDIO
  • 使用 Cucumber Scenario Outline 处理 Excel 电子表格

    如果可能的话 我试图找到一种更优雅的方法来处理从与 Excel 电子表格行 第 n 个 相关的 Cucumber Scenario Outline 中调用第 n 个数字 目前 我正在使用迭代编号来定义要从中提取数据的 Excel 电子表格的
  • 设计抽象类时是否应该考虑序列化问题?

    一般来说这个问题来自Eclipse建议在抽象类上添加串行版本UID 由于该类是抽象类 因此该类的实例永远不会存在 因此它们永远不会被序列化 只有派生类才会被序列化 所以我的问题是放置一个安全 SuppressWarnings serial
  • 如何使用maven创建基于spring的可执行jar?

    我有一个基于 Maven 的 Spring WS 客户端项目 我想将其打包为单个 jar 在eclipse中 一切运行正常 当我尝试将其打包为可执行 jar 时 我收到 ClassNotFound 异常 因为 Spring jar 未包含在
  • 无法在 BlackBerry Playbook 上设置音量

    我在更改黑莓游戏书的音量时遇到问题 首先 我将 Android 应用程序重新打包到 Palybook 应用程序 我需要使用搜索栏更改黑莓剧本的音量 并在搜索监听器中设置音频管理器音量 这是代码 audioManager AudioManag
  • RecyclerView 不调用 onCreateViewHolder 或 onBindView

    没有收到任何错误 所有数据似乎都有效 由于某种原因 没有调用与视图相关的方法 我已确定以下事项 getItemCount 是唯一被调用的适配器方法 并且返回一个正整数值 我知道这将是你们将要查看的区域 构造函数正在被调用 成员变量有效 Pa

随机推荐

  • 在 Visual Studio 2013 中禁用 git

    我有一个由 tfs 管理的存储库 然而在本地 我想通过 git 管理它 并将更改推送到 tfs 一旦我在团队资源管理器中创建 git 存储库 VS2013 就会显示该解决方案仅由 git 管理 如果我尝试编辑任何文件 它会抱怨该文件是只读的
  • 如何通过php按修改日期对文件进行排序

    背景 我有一个匿名登录 ftp 服务器 ftp nlist 仅按字母顺序列出文件 我想根据上次修改日期获取文件列表 最近的在前 我尝试了 ftp exec conn ls t 但出现了 权限被拒绝 错误 不知道为什么它不起作用 好吧 我正在
  • 使用 Plot 的线图重叠

    我有以下用于图表的选项 div div
  • 通过浏览器使用 PDO 将 MySQL 表中的数据存储为 CSV

    我有一个将数据写入 MySQL 数据库的表单 我希望用户能够下载他们的数据CSV最终提交后的格式 我的代码当前正在将数据库的内容转储到浏览器中 即它被写入页面 而不是写入 csv 文件 我想将他们发送到一个链接并提供下载文件的选项 这是我当
  • 从互联网读取数据

    我在网络服务器上有一个包含数据的远程文件夹 我使用以下方式访问数据 myData lt read table http myData csv sep header T 有没有办法对远程文件夹进行密码保护并在上述命令中输入授权 Thx 你可以
  • 使用不受支持的 WebKit 属性会产生什么影响?

    我有兴趣使用 webkit line clamp在混合 iOS 应用程序中 我已阅读苹果文档 https developer apple com library safari documentation AppleApplications
  • 合并时忽略文件/文件夹

    我目前正在使用 SVN 对我的软件项目进行版本控制 在一个正在进行的项目中 我有用于客户通用功能和规范的主干 以及用于客户特定功能和规范的分支 有什么方法可以标记一些文件 文件夹 这些文件 文件夹不应在每次执行此类操作时合并到分支中 我没有
  • Python 在调用之前修饰函数

    我有一个由其他人编写的相当复杂的装饰器 我想做的是根据决定一次调用该函数的修饰版本 或者另一次调用原始函数 未修饰 这可能吗 With decorator original function Without original functio
  • 如果输入等于字符串,则执行某些操作... python 2.7 [重复]

    这个问题在这里已经有答案了 使用以下代码时遇到问题 start over 1 question input Do you wish to try again y n if question y start over 1 else raise
  • 如何使用 xsmtp-api 和 php 库向 SendGrid 中的电子邮件主题添加替换标签

    我正在尝试在电子邮件的主题中设置我的客户的姓名 这对我的申请非常重要 从我在SendGrid API 文档 http sendgrid com docs API Reference SMTP API substitution tags ht
  • 将 JComboBox 放入 JTable 中

    我想将单独的 JComboBox 放入 JTable 的每个单元格中 IE 每个单元格的 JComboBox 内容都不相同 我基本上希望能够调用以下代码来将一行 JComboBox 添加到 JTable 中 有人有什么想法吗 谢谢 JCom
  • 如何在移动滑块时锁定页面滚动

    在 Flutter 中 我有一个应用程序 在自定义 ListView 小部件内有一个自定义滑块 唯一的问题是 当您移动滑块手柄 从左到右 时 由于 ListView 页面仍然会滚动 向上和向下 而我需要页面锁定到位 直到用户停止移动滑块 我
  • 读取 NTFS 格式的 MFT

    在网上寻找如何读 写 MFT 的解释时 我发现了以下部分 http www installsetupconfig com win32programming 1996 20AppE apnilife pdf http www installs
  • 将 nl2br 与 html 标签一起使用

    I use nl2br当显示保存在某处的一些信息时 但是当使用 HTML 标签时我不想添加 br 他们的标签 例如 如果我使用 table th th table 它将被转换为 table br th th br table br 这为这张
  • n 层架构 - BLL、DAL 和接口。什么是最佳实践?

    我有一个关于 n 层架构的问题 在问这个问题之前 我想了很久 因为这里已经有很多类似的问题了 但是 在看了一天半并阅读了其他答案之后 我仍然不确定 各种看似相似的术语和不同的方法让我感到困惑 如果我在不同的类库中有一个 BLL 和一个 DA
  • 购物车 API V3:无法为具有选项的产品创建购物车

    当我创建一个包含没有选项的产品的购物车时 一切正常 但如果任何产品有产品选项 则它不起作用 这里我得到了产品选项 它有一个 id 21 的选项 当我在创建 API 时使用此选项 id 时 它不起作用 如果您要将产品添加到购物车 并且该产品具
  • 将 celery 任务结果链接到通讯组中

    Like in 这另一个问题 https stackoverflow com questions 13271056 how to chain a celery task that returns a list into a group 我想
  • 绘制别名、像素完美的 1px 样条线(特别是 Catmull-Rom)

    简要背景 我正在开发一个基于 Web 的绘图应用程序 需要绘制穿过其控制点的 1px 粗样条线 我正在努力解决的问题是我需要绘制 p1 和 p2 之间的每个像素 就像我使用 1px 铅笔工具一样 因此 没有抗锯齿功能 一次一个像素 这需要手
  • MySQL 如何使用 INTO OUTFILE 追加到文件?

    我有以下代码 SELECT INTO OUTFILE TestInput Results csv FIELDS TERMINATED BY LINES TERMINATED BY n FROM Results 期望的结果是不断附加到 Res
  • 将二叉树转换为排序数组

    有没有一种方法可以将二进制转换为排序数组 而不必遍历树来查找每个数组索引 Node root Node runner int current smallest void findsmallest Node root Pre order tr