二叉树前序后序中序遍历

news2024/12/22 14:44:39

二叉树前序后序中序遍历

创建二叉树代码

private static class TreeNode {
    public final int value;
    public TreeNode left;
    public TreeNode right;

    public TreeNode(int value) {
        this.value = value;
    }
}

public static TreeNode createTree(int[] treeArr) {
    TreeNode[] root = new TreeNode[treeArr.length];
    for (int i = 0; i < treeArr.length; i++) {
        if (treeArr[i] == -1) {
            root[i] = null;
            continue;
        }
        TreeNode node = new TreeNode(treeArr[i]);
        root[i] = node;
        if (i == 0) continue;
        if (i % 2 == 1) {
            //左节点
            root[i / 2].left = node;
        } else {
            root[(i - 1) / 2].right = node;
        }
    }
    return root[0];
}

前序遍历

/**
 * 前序 先根,再左树,再右树
 *
 * @param root
 */
public static void treeForeachFirst(TreeNode root) {
    Queue<TreeNode> stack = new LinkedList<>();
    stack.add(root);
    while (!stack.isEmpty()) {
        TreeNode pop = stack.poll();
        System.out.print(pop.value + " ");
        if (pop.left != null) stack.add(pop.left);
        if (pop.right != null) stack.add(pop.right);
    }
}

中序遍历和后续遍历要用到一个帮助类

private static class HelpTreeNode {
    public final TreeNode realNode;
    public boolean isCheckChild = false;

    public HelpTreeNode(TreeNode realNode) {
        this.realNode = realNode;
    }
}

中序遍历

/**
 * 先左树,再根,再右树
 *
 * @param root
 */
public static void treeForeachMid(TreeNode root) {
    Stack<HelpTreeNode> stack = new Stack<>();
    stack.push(new HelpTreeNode(root));
    while (!stack.isEmpty()) {
        HelpTreeNode pop = stack.pop();
        if (pop.isCheckChild) {
            System.out.print(pop.realNode.value + " ");
        } else {
            if (pop.realNode.right != null) {
                stack.push(new HelpTreeNode(pop.realNode.right));
            }
            stack.push(pop);
            pop.isCheckChild = true;
            if (pop.realNode.left != null) {
                stack.push(new HelpTreeNode(pop.realNode.left));
            }
        }
    }
}

后序遍历

/**
 * 后续遍历,先左树,再右树,再根
 *
 * @param root
 */
public static void treeForeachLast(TreeNode root) {
    Stack<HelpTreeNode> stack = new Stack<>();
    stack.push(new HelpTreeNode(root));
    while (!stack.isEmpty()) {
        HelpTreeNode pop = stack.pop();
        if (pop.isCheckChild) {
            System.out.print(pop.realNode.value + " ");
        } else {
            stack.push(pop);
            if (pop.realNode.right != null) {
                stack.push(new HelpTreeNode(pop.realNode.right));
            }
            pop.isCheckChild = true;
            if (pop.realNode.left != null) {
                stack.push(new HelpTreeNode(pop.realNode.left));
            }
        }
    }
}

运行

public static void main(String[] args) {
    TreeNode tree = createTree(new int[]{1, 2, 3, 4, 5, 6, 7, -1, -1, -1, -1, 8, 9, -1, 10});
    treeForeachFirst(tree);
    System.out.println();
    treeForeachMid(tree);
    System.out.println();
    treeForeachLast(tree);
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1975163.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS应用开发者高级认证多选题答案(95%高正确率,8.3更新)

【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&#xff01;】 【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&#xff01;】 【多选题分数占比高&#xff0c;多选高分&#xff0c;单选稍微做下就能考试通过&a…

MongoDB聚合操作详解

文章目录 聚合操作聚合管道管道&#xff08;Pipeline&#xff09;和阶段&#xff08;Stage&#xff09;常用的聚合阶段运算符准备数据集&#xff0c;执行脚本$project$match$count$group$unwind$limit$skip$sort$lookup聚合操作案例1聚合操作案例2 聚合优化执行顺序内存排序 整…

2024有哪些开放式耳机值得入手!开放式耳机推荐!

耳机基本上已经成为我们日常生活中的必需品&#xff0c;开放式蓝牙耳机以其独特的设计&#xff0c;提供了更为自然和安全的听音体验&#xff0c;为了帮助大家更好的选择开放式耳机&#xff0c;我挑选了几个小技巧以及我自用过后觉得还不错的五款耳机推荐给大家。 一、耳机佩戴…

Day6

模板的继承 在一个网页中&#xff0c;可能会出现几个页面样式几乎不变的情况。 确实是可以在每个html文件中写重复代码&#xff0c;但是&#xff0c;假如说后期运维的话&#xff0c;如果需要在某一处修改数据&#xff0c;那用过这个代码的都得逐一修改&#xff0c;这样的运维…

端到端自动驾驶:挑战与前沿

End-to-end Autonomous Driving: Challenges and Frontiers 端到端自动驾驶&#xff1a;挑战与前沿 Abstract The autonomous driving community has witnessed a rapid growth in approaches that embrace an end-to-end algorithm framework, utilizing raw sensor input …

Wiley 旗下一区 Top 期刊编委集体辞职!难道OA真的才是大势所趋?

【SciencePub学术】Wiley作为和Springer Nature、Elsevier并驾齐驱的三大出版商之一&#xff0c;在不久前又被爆出&#xff0c;其旗下一本稳定检索了53年的老牌期刊《Philosophy & Public Affairs》&#xff0c;编委集体辞职&#xff01; 其实&#xff0c;这已经不是Wiley出…

CmsEasy逻辑漏洞--零元购

CmsEasy逻辑漏洞--零元购 选择购买MackBook 购买成功后会员中心发现多出8100快钱 然后就可以正常购买了

@antv/x6 利用interacting方法来设置禁止结点移动的方法实现。

1、官网有个设置说明。 https://x6.antv.antgroup.com/api/graph/graph 2、然后有可行的方法一&#xff1a; let graph new Graph({container: document.getElementById(container),interacting: function (cellView) {if (cellView.cell.getData() ! undefined && …

行为型设计模式2:观察者/职责链/中介者/访问者

设计模式&#xff1a;观察者/职责链/中介者/访问者 (qq.com)

【Android Studiio】default activity 原生安卓和uniapp默认启动分析(uniapp添加MainActivity)

文章目录 思路&#xff1a; 一、原生安卓二、uniapp三、在uni-app项目中&#xff0c;如果你想要加入自定义的MainActivity&#xff08;例如Android平台&#xff09; 探究方向&#xff1a;找到Default Activity 思路&#xff1a; 在Android开发中&#xff0c;"default ac…

谷粒商城实战记录-虚拟机开启密码认证登录

文章目录 一&#xff0c;虚拟机无法用用户名密码登录二&#xff0c;解决方案1&#xff0c;修改配置2&#xff0c;重启sshd服务3&#xff0c;测试SSH登录注意事项结论 参考文献 一&#xff0c;虚拟机无法用用户名密码登录 当使用Vagrant创建和管理虚拟机时&#xff0c;通常会通…

以太网ICMP测试实验

目录 一.概述 1.1IP协议 1.1.1IP协议简介 1.1.2IP协议首部报文格式 1.2ICMP协议 1.2.1ICMP协议简介 1.2.2ICMP报文格式 二.实验任务 三.模块设计 3.1总体模块设计 3.2ICMP模块设计 3.2.1icmp_rx 模块 3.2.2icmp_tx模块 四.modelsim仿真 4.1icmp_rx模块仿真 4.2i…

完美平替navicat的数据库软件DBeaver,免费开源,功能强大,使用简单

DBeaver Community 是一个免费的跨平台数据库工具&#xff0c;适用于开发人员、数据库管理员、分析师和所有与数据打交道的人。它支持所有流行的 SQL 数据库&#xff0c;如 MySQL、MariaDB、PostgreSQL、SQLite、Apache Family 等 1.到官网下载win版本直接安装 https://dbeav…

从一到无穷大 #32 TimeCloth,云上的快速 Point-in-Time Recovery

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言解决方案FAST FINE-GRAINED PITRLog FilterInter-Record Dependency ResolutionL…

全球氢燃料电池汽车市场规划预测:未来六年CAGR为44.4%

一、引言 随着全球能源转型和环保意识的提升&#xff0c;氢燃料电池汽车作为清洁能源汽车的重要组成部分&#xff0c;其市场潜力日益凸显。本文旨在探索氢燃料电池汽车行业的发展趋势、潜在商机及其未来展望。 二、市场趋势 全球氢燃料电池汽车市场的增长主要受全球环保政策推…

springboot辽B代驾管理系统论文源码调试讲解

2 相关技术 2.1 MySQL数据库 本研究与开发的应用程序在数据操作中难以预料&#xff0c;有时候甚至产生变化。没有办法直接在Word中写数据信息&#xff0c;这不但不安全&#xff0c;并且难以达到应用程序的功能。想要实现所需要的文档存储功能&#xff0c;务必选择专业数据库存…

奥运会Ⅲ--AI风险矩阵

问满屋子的人工智能专家&#xff1a;“我们如何知道我们的人工智能是否安全可靠&#xff1f;”你可能会得到十几个不同的答案&#xff0c;每个答案都比上一个更复杂。似乎不知何故&#xff0c;在 OpenAI 成为地球上增长最快的公司一年零几个月后&#xff0c;每个人都是 LLM&…

CANOpen EMCY紧急报文介绍

什么是CANOpen紧急报文 CANOpen中的Emcy紧急报文用于当设备出现故障或警告时&#xff0c;向其它节点报告故障或警告使用的。如设备某个设备出现过压或过流时&#xff0c;就可以发送紧急报文。 紧急报文的格式 错误代码&#xff1a;是0x1003索引预定义错误字段的内容&#xff…

修改VSCode插件默认安装路径

文章目录 前言VSCode插件默认安装路径添加环境变量先修改路径注意事项 前言 今天发现C盘快满了&#xff0c;只能清理点东西&#xff0c;给C盘腾出的空间出来&#xff0c;结果一看&#xff0c;VSCode的插件目录就占了不少呢。 VSCode插件默认安装路径 C:\Users\{个人用户名}\.…

比较支持向量机、AdaBoost、逻辑斯谛回归模型的学习策略与算法

(1)支持向量机&#xff1a;SVM 是一种监督学习算法&#xff0c;用于分类和回归任务。 学习策略&#xff1a;间隔最大化 算法&#xff1a;最大间隔法、软间隔算法。 参数学习&#xff1a;参数学习过程是要最小化目标函数&#xff0c;通常通过优化算法&#xff08;如SMO&#x…