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

  介绍

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

一、前序遍历

1。题目描述

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

2。输入输出示例

示例1:

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

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

输出:[1,2,3]

示例2:

输入:根=[]

输出:[]

示例3:

输入:根=[1]

输出:[1]

3。解题思路

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

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

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

4。代码实现

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

二,中序遍历

1。题目描述

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

2。输入输出示例

示例1:

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

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

输出:(1、3、2)

示例2:

输入:根=[]

输出:[]

示例3:

输入:根=[1]

输出:[1]

3。解题思路

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

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

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

4。代码实现

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

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