LeetCode94:二叉树的中序遍历(非递归实现)
创作时间:
作者:
@小白创作中心
LeetCode94:二叉树的中序遍历(非递归实现)
引用
CSDN
1.
https://m.blog.csdn.net/Zhangjiangyan711/article/details/145064152
题目描述
给定一个二叉树的根节点root,返回它的中序遍历。
解题思路
要实现二叉树的非递归中序遍历,必须要借助栈。整个操作可以看成是很多个只有左子树的单边树,从头结点开始一直向左下方走,将经过的结点依次入栈,直至没有左孩子了,弹出结点,同时指向当前结点的右孩子,那么右子树同样可以看成是以这个右孩子为头结点的多个单边树,重复上面的操作即可。
以下图的中序遍历为例,1、2、3结点依次入栈,结点3无左孩子,3弹出,指向右孩子4,4入栈,无左孩子,4弹出,4无右孩子,2弹出,2无右孩子,1弹出,指向右孩子5,5、6依次入栈,6无左孩子,6弹出,6无右孩子,5弹出,指向右孩子7,7无左孩子,7弹出,7无右孩子,此时栈空,无法继续弹出栈顶元素,遍历结束。
具体迭代步骤如下:
- 空树无法遍历,直接返回空数组
- 在非空二叉树中,首先将头结点压栈,再使
root=root.left,将该结点的左孩子压栈,重复该操作(即:将二叉树的左边界依次压入栈中) - 判断当前结点是否为空(也就是步骤2最后一次执行压栈操作前指向的结点的左孩子是否存在),若为空,弹出栈顶元素(当前结点的父结点)并加入到数组中,同时让
root=root.right,重复步骤2 - 当所有结点全都出栈且当前结点也为空时,遍历不再继续,结束
/**
* 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;
* }
* }
*/
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if(root == null) return list;
else {
Stack<TreeNode> stack = new Stack<>();
while(!stack.isEmpty() || root != null) {
if(root != null) {
stack.push(root);
root = root.left;
}else {
root = stack.pop();
list.add(root.val);
root = root.right;
}
}
}
return list;
}
}
热门推荐
00萝莉文化盛行,如何理解并正确对待?
中船应急决定不提前赎回可转债,刚被立案股民可报名挽损
买房首付的资金筹集方法有哪些?这些方法对购房者有何实际帮助?
世人只知梁祝悲,未闻余杭花妖泪。刀郎动人歌曲《花妖》
AI时代,如何培养和用好创新型人才
云南大理去洱海有多远?路程、距离及怎么走全解析
大厂人搞副业,尽头是离职博主?
从《镜花缘》看社会转型期的文化反思
70岁后想健康长寿,避开5个“养生”误区,否则很伤身
腊肉的嘌呤含量是多少
HIT(高强度间歇训练)运动:燃脂新宠,健康新选择
国际劳工组织(ILO)数据库:全球劳动力市场信息的权威来源
专科生的职业规划与发展路径:如何为未来铺路?
糖尿病患者的科学饮食指南
2024年指标到校政策全面公开:各区市县市级统分指标名额分配一览
连锁门店如何快速联网
种核桃种子要怎么放才是对的
"妖股"回落!东方精工踩中多个热点概念,换手率超52%被砸"天地板"
豌豆苗的正确焯水方法:营养美味并存的关键
十本非常好看的废土流小说,末日降临,危机四伏
治疗白癜风中药1类创新药获批进入临床研究
十类适合吃烧烤喝的酒推荐 吃烧烤喝什么酒比较好
如何清除老年人住过的房间的“老人味”,潮湿霉味等异味?
芋头和土豆可以一起吃吗
怀仁羊杂:塞北特色小吃的匠心传承
如何检查身份证是否存在异常?
一文看懂乌龙茶:从入门到品鉴的全面指南
食肉指南:猪身上真正不能吃的,其实是这3处
成年蝴蝶犬每日饮食规划(蝴蝶犬饮食需求及食物推荐)
度数越高全飞秒伤害越大吗?解析600度/800度/1000度以上能做全飞秒吗