Java二叉树遍历全解析:递归与非递归实现

发布时间:2026/10/21 20:50:30

Java二叉树遍历全解析:递归与非递归实现 java二叉树的遍历方式详解更新时间是在2021年08月16日, 具体的时间点为09:48:12。这篇文章的主要内容, 是为广大的朋友们去详细地介绍一下, 使用JAVA这个编程语言来实现二叉树的遍历的这个事情, 它一共有四种方式, 这种做法是具有一定的参考的价值意义的, 那些对这种内容感兴趣的小伙伴们, 是可以去参考看一看的, 希望能够给到你带来一些切实的帮助。一、对于前序遍历这一点, 大家可以把它分成递归的情况还有非递归的情形来讲一讲。前序遍历就是先遍历根再遍历左之后是右 根左右递归实现public List preorderTraversal(TreeNode root) {List listnew ArrayList();pre(root,list);return list;}public void pre(TreeNode root,List list){if(rootnull){return ;}list.add(root.val);pre(root.left,list);pre(root.right,list);}迭代实现我们可以使用栈这种数据结构来完成操作, 具体的做法是先让把树的右子树放进堆栈里面去, 然后下一步再把左子树也放进去。public List preorderTraversal(TreeNode root) {List listnew LinkedList();if(rootnull) return list;Stack stacknew Stack();stack.push(root);while(!stack.isEmpty()){TreeNode nodestack.pop();list.add(node.val);if(node.right!null) stack.push(node.right);if(node.left!null) stack.push(node.left);}return list;}二、中序遍历递归和非递归中序遍历就是先遍历左再遍历根最后遍历右 左根右递归实现public List inorderTraversal(TreeNode root) {List listnew ArrayList();inorder(root,list);return list;}public void inorder(TreeNode root,List list){if(rootnull){return ;}inorder(root.left,list);list.add(root.val);inorder(root.right,list);}迭代实现我们可以利用栈来实现二叉树的中序遍历, 因为中序遍历的规则是左根右, 所以第一步就是先定义好节点并且找到最靠左的那个节点把它压入栈中, 接下来就把这个节点弹出栈来检查它。在判断完之后我们再继续看看该节点是不是存在有右孩子的情况。public List inorderTraversal(TreeNode root) {//迭代实现List list new LinkedList();Stack stacknew Stack();TreeNode curroot;while(cur!null||!stack.isEmpty()){//先找到左节点while(cur!null){stack.push(cur);curcur.left;}TreeNode nodestack.pop();list.add(node.val);if(node.right!null){curnode.right;}}return list;}三、后序遍历这种操作, 它包含递归的写法, 也包含非递归的写法。后序遍历就是左右根递归实现public List postorderTraversal(TreeNode root) {List listnew ArrayList();postorder(root,list);return list;}public void postorder(TreeNode root,List list){if(rootnull){return ;}postorder(root.left,list);postorder(root.right,list);list.add(root.val);}非递归实现使用两个栈, 这样才能够完成对二叉树的后序遍历这个任务。先把第一个栈里面放入根节点, 然后弹出它并且放入第二个节点这里所说的位置或者状态中, 接着再把左右孩子放入第一个栈里, 之后再次弹出这些内容并放入第二个栈里面, 如此操作就可以实现了。public List postorderTraversal(TreeNode root) {//利用双栈实现后序遍历Stack s1new Stack();Stack s2new Stack();List listnew LinkedList();if(rootnull) return list;s1.push(root);while(!s1.isEmpty()){TreeNode nodes1.pop();s2.push(node);if(node.left!null) s1.push(node.left);if(node.right!null) s1.push(node.right);}while(!s2.isEmpty()){TreeNode curs2.pop();list.add(cur.val);}return list;}四、层序遍历通过使用队列这个手段来完成层序遍历这样的操作。public List levelOrder(TreeNode root) {//用队列实现层序遍历//第一层节点先进队列出的节点带下一层的节点List listnew ArrayList();if(rootnull) return list;Queue queuenew LinkedList();queue.offer(root);while(!queue.isEmpty()){List list1new ArrayList();int sizequeue.size();while(size!0){TreeNode curqueue.poll();list1.add(cur.val);if(cur.left!null){queue.offer(cur.left);}if(cur.right!null){queue.offer(cur.right);}size--;}list.add(list1);}return list;}
延伸阅读

更多相关文章

2026/10/21 20:45:30

springboot整合Knife4j

一、前言 knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案(在非Java项目中也提供了前端UI的增强解决方案),前身是swagger-bootstrap-ui,取名knife4j是希望她能像一把匕首一样小巧,轻量,并且功能强悍! 二、快速使用 2.1 依赖…

2026/10/21 20:45:30

软件定义汽车---目的、实现途径与架构演进

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 假若你的生活不够好,不够努力,那么,加油努力吧,不要抱怨,起而行,迎头赶上,方是正途。假若你已经拥有很多,却依然活得不快乐,那么,让自己慢…

2026/10/21 20:45:30

接口超时之后,FDE为什么不能直接再试一次

FDE岗位实务指南 第18篇上一篇的四道检查管的是"动作发出之前"。这一篇处理动作发出之后的硬情况:请求发出去了,响应没回来。页面转圈,然后提示超时。此刻用户的直觉动作只有一个:再点一次。产品团队的直觉通常也一样&…

2026/10/22 1:52:18

免费学Python:learnpython完整笔记与互动课程资源全解

【免费下载链接】learnpython Python Resources for Everyone 项目地址: https://gitcode.com/gh_mirrors/learnpython5/learnpython 点击查看 免费下载 learnpython 是一个面向所有人的免费 Python 学习资源仓库,把完整的 Python 学习笔记、互动课程、…

2026/10/22 1:52:18

如何快速上手 liKeYun_Ylb:从零跑通微信私域引流系统的完整指南

如何快速上手 liKeYun_Ylb:从零跑通微信私域引流系统的完整指南 【免费下载链接】liKeYun_ylb 引流宝致力于为个人、团队提供基于微信私域流量的推广、引流的效率工具。可减轻人力,有效降低资源损失、流量流失的几率。引流宝完全开源,免费&am…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑