当前位置: 首页 > 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.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>();preorder(root, res);return res;}public void preorder(TreeNode root, List<Integer> res) {if (root == null) {return;}res.add(root.val);preorder(root.left, res);preorder(root.right, res);}//中序遍历public List<Integer> inorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();inorder(root, res);return res;}public void inorder(TreeNode root, List<Integer> res) {if (root == null) {return;}inorder(root.left, res);res.add(root.val);inorder(root.right, res);}//后序遍历public List<Integer> postorderTraversal(TreeNode root) {List<Integer> res = new ArrayList<Integer>();postorder(root, res);return res;}public void postorder(TreeNode root, List<Integer> res) {if (root == null) {return;}postorder(root.left, res);postorder(root.right, res);res.add(root.val);}
}

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

相关文章:

  • 既然有了字节流,为什么还要有字符流?
  • 3+单细胞+代谢+WGCNA+机器学习
  • 音乐推荐与管理系统Python+Django网页界面+协同过滤推荐算法
  • (论文阅读15/100)You Only Look Once: Unified, Real-Time Object Detection
  • init进程启动过程
  • 全网最详细的【shell脚本的入门】
  • CH10_简化条件逻辑
  • nn.LayerNorm解释
  • Springboot搭建微服务案例之Eureka注册中心
  • 【MySQL】用户管理权限控制
  • 若依框架前后端分离版服务器部署,前端nginx的配置
  • 基于单片机的滚筒洗衣机智能控制系统设计
  • 简述多模态学习中,对齐、融合和表示
  • Kotlin 进阶函数式编程技巧
  • 操作系统——内存映射文件(王道视频p57)
  • 王道p18 07.将两个有序顺序表合并为一个新的有序顺序表,并由函数返回结果顺序表。(c语言代码实现)
  • 2024最新mac电脑清理垃圾的软件有哪些?
  • 2023年【山东省安全员C证】考试技巧及山东省安全员C证模拟试题
  • 2024最新免费的mac电脑清理垃圾的软件有哪些?
  • linux下sqlplus登录oracle显示问号处理办法
  • Git 删除本地和远程分支
  • Selenium元素定位之页面检测技巧
  • C# 文件 文件夹 解除占用
  • 数据库 存储引擎
  • 操作系统复习(2)进程管理
  • 通过51单片机控制28byj48步进电机按角度正反转旋转
  • 二十三种设计模式全面解析-装饰器模式的高级应用:打造灵活可扩展的通知系统
  • 使用脚本整合指定文件/文件夹,执行定制化 ESLint 命令
  • C++ static与类
  • 数据结构之堆的实现(图解➕源代码)