【java】后序遍历二叉树

采用递归方式实现

节点类

public class Node {private int value;//父节点private Node fNode;//左节点private Node left;//右节点private Node right;//是否已经打印过private boolean sign = false;public Node() {}public boolean isSign() {return sign;}public void setSign(boolean sign) {this.sign = sign;}public Node getfNode() {return fNode;}public void setfNode(Node fNode) {this.fNode = fNode;}public Node getLeft() {return left;}public void setLeft(Node left) {this.left = left;//设置左节点的父类left.setfNode(this);}public Node getRight() {return right;}public void setRight(Node right) {this.right = right;//设置右节点的父类right.setfNode(this);}public int getValue() {return value;}public Node setValue(int value) {this.value = value;return this;}
}

递归方法 

//后序遍历二叉树
public static void reducer(Node node) {if (node == null) return;//判断当前节点是否已经打印,如果没有就进去判断它的左右节点if (!node.isSign()) {/*if:如果左节点不为空并且没有被打印,那么就说明该节点未被调用过,进行递归操作else if: 判断完左节点就判断右节点,这是后续遍历的操作顺序else : 如果左节点和右节点都打印了,那么就打印当前节点的值,并且回退到上一个节点(父节点)*/if (node.getLeft() != null && !node.getLeft().isSign()) {reducer(node.getLeft());} else if (node.getRight() != null && !node.getRight().isSign()) {reducer(node.getRight());} else {System.out.print(node.getValue());node.setSign(true);//如果父节点为空说明已经遍历完了if (node.getfNode() != null) {reducer(node.getfNode());} else {return;}}}
}

测试 

public class BinaryIterator {public static void main(String[] args) {//构建顶级节点的左节点Node l = new Node().setValue(2);l.setLeft(new Node().setValue(3));l.setRight(new Node().setValue(4));//构建顶级节点的右节点Node r = new Node().setValue(5);r.setLeft(new Node().setValue(6));r.setRight(new Node().setValue(7));//顶节点(起始节点)Node node = new Node();node.setLeft(l);node.setRight(r);node.setValue(1);//测试reducer(node);//rest:3426751}}

草图(想要透彻理解,必须要慢慢根据图进行推演)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

O2O:Offline Meta-Reinforcement Learning with Online Self-Supervision

ICML 2022 paper Introduction 元强化学习(Meta RL)结合O2O。元RL需要学习一个探索策略收集数据,同时还需学习一个策略快速适应新任务。由于策略是在固定的离线数据集上进行元训练的,因此在适应探索策略收集的数据时,它可能表现得不可预测&…

通义灵码-智能编码辅助工具

1.介绍 通义灵码,是阿里云出品的一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研发智能问答、异常报错排查等能力,并针对阿里云 SDK/OpenAPI 的使用场景调优&a…

腾讯云学生服务器申请入口、续费优惠价格和常见问题解答

2024年腾讯云学生服务器优惠活动「云校园」,学生服务器优惠价格:轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年,轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年,CVM云服务器2核4G配置842.4元一年&…

网络——DHCP服务器、DNS服务器实验

网络——DHCP服务器、DNS服务器实验 一、DHCP服务器实验 DHCP——动态主机配置协议,用来管理ip地址的分配。网络中的每台计算机都有至少一个ip地址。在Windows网络连接对话框中可以设置成自动获取ip地址,这样主机作为DHCP client就可以自动从DHCP server获取ip地址了。 DHC…

支小蜜校园防欺凌系统如何有效应对学生霸凌?

学生霸凌不仅直接伤害到被霸凌者的身心健康,也对整个校园的和谐氛围构成了威胁。为了应对这一问题,校园防欺凌系统应运而生,成为维护校园安全、保护学生权益的重要工具。那么当校园防欺凌系统面对学生霸凌时,该如何有效应对呢&…

重新排序。

问题描述 给定一个数组A和一些查询 L,R求数组中第L至第 R个元素之和。 小蓝觉得这个问题很无聊,于是他想重新排列一下数组使得最终每个查 询结果的和尽可能地大。小蓝想知道相比原数组,所有查询结果的总和最多可 以增加多少? 输入格式 输入第一行包含一个整数n。 第二行包含n个…

PTA L2-015 互评成绩

学生互评作业的简单规则是这样定的:每个人的作业会被k个同学评审,得到k个成绩。系统需要去掉一个最高分和一个最低分,将剩下的分数取平均,就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输入格式&#xf…

【LeetCode:2917. 找出数组中的 K-or 值 + 模拟+位运算】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

洛谷P2233 公交车路线

本题题号特殊,相对简单。 题目描述 在长沙城新建的环城公路上一共有 88 个公交站,分别为 A、B、C、D、E、F、G、H。公共汽车只能够在相邻的两个公交站之间运行,因此你从某一个公交站到另外一个公交站往往要换几次车,例如从公交站…

【动态规划】【数论】【区间合并】3041. 修改数组后最大化数组中的连续元素数目

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 数论 区间合并 LeetCode3041. 修改数组后最大化数组中的连续元素数目 给你一个下标从 0 开始只包含 正 整数的数组 nums 。 一开始,你可以将数组中 任意数量 元素增加 至多 1 。 修改后,你可以从…

Go-Gin-example 第五部分 加入swagger

上一节链接 swagger 为什么要用swagger 问题起源于 前后端分离, 后端:后端控制层,服务层,数据访问层【后端团队】前端:前端控制层,视图层,【前端团队】 所以产生问题:前后端联调…

好物周刊#46:在线工具箱

https://github.com/cunyu1943 村雨遥的好物周刊,记录每周看到的有价值的信息,主要针对计算机领域,每周五发布。 一、项目 1. twelvet 一款基于 Spring Cloud Alibaba 的权限管理系统,集成市面上流行库,可以作用为快…