千家信息网

如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现

发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,本篇文章为大家展示了如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、前序遍历1.题目描述给你二
千家信息网最后更新 2026年11月04日如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现

本篇文章为大家展示了如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

一、前序遍历

1.题目描述

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

2.输入输出示例

示例 1:

输入:root = [1,null,2,3]

输出:[1,2,3]

示例2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

3.解题思路

前序遍历:根结点-左子树-右子树

1.判断额外情况,如果树为空,直接返回
2.创建一个栈用来保存右子树
3.先将根结点入栈,避免多次判断栈为空
4.取出栈顶元素(第一次为根结点),从上往下遍历最左侧路径中的每个结点
5.在遍历时判断当前结点的右子树是否为空,非空则入栈
6.遍历结束后,此时栈顶元素为前一个结点的右子树,将栈顶元素取出,将其看作一棵树,继续重复上述操作,即形成循环。

4.代码实现

class Solution {    public List preorderTraversal(TreeNode root) {        List list=new ArrayList<>();        if(root==null){            return list;        }        //创建一个栈用来保存右子树        Stack s=new Stack<>();        TreeNode cur=root;        s.push(root);        //从上往下遍历最左侧路径中的每个结点,并将其右子树保存起来---栈        while(!s.empty()||cur!=null){            cur=s.pop();            while(cur!=null){                list.add(cur.val);                if(cur.right!=null){                    s.push(cur.right);                }                cur=cur.left;             }        }        return list;    }}

二、中序遍历

1.题目描述

给定一个二叉树的根节点 root ,返回它的 中序 遍历。

2.输入输出示例

示例 1:

输入:root = [1,null,2,3]

输出:[1,3,2]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

3.解题思路

中序遍历:左子树-根结点-右子树

1.判断额外情况,如果树为空,直接返回
2.创建一个栈用来保存结点
3.从上往下遍历最左侧路径中的每个结点,并将其保存到栈中,走到cur==null的位置
4.此时栈顶元素为最左侧路径的最后一个结点,将其加入到list并将栈顶元素移除
5.判断最后一个结点的右子树是否为空,过程和上述的过程是一样的,直接将其右子树看作一棵树,整个过程便循环起来

4.代码实现

class Solution {    public List inorderTraversal(TreeNode root) {        List list=new ArrayList<>();        if(root==null){            return list;        }        Stack s=new Stack<>();        TreeNode cur=root;         //从上往下遍历最左侧路径中的每个结点,并将其保存到栈中        while(!s.empty()||cur!=null){            while(cur!=null){                s.push(cur);                cur=cur.left;            }            cur=s.pop();            list.add(cur.val);            cur=cur.right;        }        return list;    }}

三、后序遍历

1.题目描述

给定一个二叉树,返回它的 后序 遍历。

2.输入输出示例

示例:
输入: [1,null,2,3]
1
\
2
/
3

输出: [3,2,1]

3.解题思路

后序遍历:左子树-右子树-根结点

1.判断额外情况,如果树为空,直接返回
2.创建一个栈用来保存遍历的结点
3找出以cur为根的二叉树中最左侧的节点,并保存所经路径中的所有结点-栈
4.此时栈顶元素为最左侧路径的最后一个结点
5.先要判断最后一个结点的右子树是否为空

如果为空,直接将结点加入list,同时将栈顶元素删除
如果不为空则将右子树看作一棵树,重新进入循环判断

注意:如果按照这样,到了最后的右子树就会一直循环出不来
解决方案:
创建一个prev用来标记已经遍历过的结点,将能否编历的条件改为:top的右子树为空||top的右子树已经遍历过

4.代码实现

class Solution {    public List postorderTraversal(TreeNode root) {        List list=new ArrayList<>();        if(root==null){            return list;        }        Stack s=new Stack<>();        TreeNode cur=root;        TreeNode prev=null;//用来标记刚刚遍历过的节点        while(!s.empty()||cur!=null){            //1.找出以cur为根的二叉树中最左侧的节点,并保存所经路径中的所有节点---栈            while(cur!=null){                s.push(cur);                cur=cur.left;            }            TreeNode top=s.peek();            //top能否遍历:top的右子树为空||top的右子树已经遍历过            if(top.right==null||top.right==prev){                list.add(top.val);                prev=top;                s.pop();            }else{                cur=top.right;            }          }        return list;    }}

上述内容就是如何进行Java 数据结构中二叉树前中后序遍历非递归的具体实现,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

结点 子树 示例 输入 输出 路径 元素 节点 并将 循环 代码 思路 情况 果树 过程 题目 一棵树 数据 数据结构 结构 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 今日互联网科技 互联网是不是新科技 互联网科技社 合肥互联网科技公司 互联网科技作文 奇酷互联网科技公司 太原新华互联网科技学校怎么样 博兴的互联网电子科技公司 厦门比较好的科技互联网公司 黑科技闪耀互联网之光 花神(南京)互联网科技有限公司 互联网科技商业 洛阳昕诺飞互联网科技有限公司 中国互联网公司排名锤子科技 电子商务与互联网科技的关系 广东鹅鹅鹅互联网科技有限公司 互联网高科技行业有哪些企业 第三届互联网大会安防黑科技 互联网企业和网络科技有限公司 武汉亿视互联网科技有限公司 广州大一互联网络科技有限公司 科技和互联网公司 深圳互联网科技公司 中国互联网科技发展 互联网对科技的发展 互联网还是高科技吗 和信科技工业互联网 浙南科技城互联网大厦建设工程 雨阳互联网卡科技有限公司 互联网的黑科技实验室
0