当前位置: 首页 > news >正文

算法:Java构建二叉树并迭代实现二叉树的前序、中序、后序遍历

先自定义一下二叉树的类:

// Definition for a binary tree node.
public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}

 一个代码里面同时实现二叉树的前序、中序、后序遍历:

以该二叉树为例

import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;class preorderTraversalSolution {public static void main(String[] args) {TreeNode root = new TreeNode(1);root.left = new TreeNode(2);root.right = new TreeNode(3);root.left.left = new TreeNode(4);root.left.right = new TreeNode(5);root.right.right = new TreeNode(6);Solution sol = new Solution();// 前序、中序、后序System.out.println(sol.preorderTraversal(root).toString());  //[1, 2, 4, 5, 3, 6]System.out.println(sol.inorderTraversal(root).toString());  //[4, 2, 5, 1, 3, 6]System.out.println(sol.postorderTraversal(root).toString());  //[4, 5, 2, 6, 3, 1]}
}class Solution {//前序遍历public List<Integer> preorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;while(!stack.isEmpty() || node != null){while (node != null) {res.add(node.val);  //相比中序遍历,只有这行代码换了位置stack.push(node);node = node.left;}node = stack.pop();node = node.right;}return res;}//中序遍历public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;while(!stack.isEmpty() || node != null){while (node != null) {stack.push(node);node = node.left;}node = stack.pop();res.add(node.val);  //相比前序遍历,只有这行代码换了位置node = node.right;}return res;}//后序遍历public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();if (root == null) {return res;}Deque<TreeNode> stack = new LinkedList<TreeNode>();TreeNode node = root;TreeNode pre = null;while(!stack.isEmpty() || node != null){while (node != null) {stack.push(node);node = node.left;}node = stack.pop();if (node.right == null || node.right == pre) {//如果不存在右子树,则输出该节点的值//如果该节点的右结点刚刚遍历过了,则也应该输出该节点的值res.add(node.val);pre = node;node = null;}else{//如果存在右子树,则重新放回栈中,因为它的值要在右子树遍历完之后添加stack.push(node);node = node.right;}}return res;}
}

 三种遍历方式的Java递归实现在这里:算法:Java构建二叉树并递归实现二叉树的前序、中序、后序遍历-CSDN博客 

http://www.lryc.cn/news/217853.html

相关文章:

  • 大数据毕业设计选题推荐-旅游景点游客数据分析-Hadoop-Spark-Hive
  • 单片机,0.06
  • [PyTorch][chapter 59][强化学习-2-有模型学习]
  • 【接口测试】HTTP接口详细验证清单
  • ALLRGRO拼板的问题。
  • YOLO算法改进6【中阶改进篇】:depthwise separable convolution轻量化C3
  • 自定义类型枚举
  • PHP foreach 循环跳过本次循环
  • lua-web-utils库
  • 大数据毕业设计选题推荐-热门旅游景点数据分析-Hadoop-Spark-Hive
  • Oracle-执行计划
  • Pytho入门教程之Python运行的三种方式
  • 如何修改docker容器中的MySQL数据库的密码?
  • JOSEF约瑟 数显三相电压继电器 HJY-931A/D 导轨安装
  • 第6章_多表查询
  • 吴恩达《机器学习》4-1->4-5:多变量线性回归
  • 搜索引擎系统简要分析
  • 蓝桥杯(C++ 扫雷)
  • LuatOS-SOC接口文档(air780E)--mobile - 蜂窝网络
  • c++创建函数对象的不同方式
  • python实现从字符串中识别出省市区信息
  • GCN火车票识别项目 P1 火车票识别项目介绍 Pytorch LSTM/GCN
  • shell script 的默认变量$0,$1,$2...,参数偏移的shift
  • 2023年【危险化学品经营单位安全管理人员】复审考试及危险化学品经营单位安全管理人员模拟考试题库
  • Java 正则表达式重复匹配篇
  • 0009Java安卓程序设计-ssm基于android手机设计并实现在线点单系统APP
  • react_14
  • 批量导出 PPT的备注到一个txt文本中
  • 文本内容转换成语音播放的工具:Speech Mac
  • 运维知识点-MySQL从小白到入土