题目
题目:非递归中根遍历二叉树,树结构如下:
遍历结果:20 30 40 50 80 100 120
猜想
非递归先根遍历使用栈是可以的,中根也可以吧?
简化
1.这棵树太复杂了,简单一点更容易理解.于是
打印结果:30 50 100。
打印这样的结果,需要50进栈,30进栈,30出栈,50出栈,100进栈再出栈
落实一下代码逻辑
根节点50进栈,左孩子30进栈,左子树30没有左孩子,30弹栈
栈不为空,50弹栈
可是100如何进栈呢?应该是50弹栈的时候,检查是否右孩子,如果有右孩子,将右孩子压栈
弹栈时,检查是否存在右孩子,如果有右孩子,将右孩子压栈。我们可以试试给30增加一个右孩子,比如下图:
我们再试试30弹栈的同时,将40压栈是否合适?
这个方法,可以耶,上代码,Python版本
class Solution(object): """ 50 / \ 30 100 / \ / \ 20 40 80 120 """ def midOrderNoRecursion(self, root): if not root: return stack = list() cur_node = root while stack or cur_node: if cur_node: stack.append(cur_node) if cur_node and cur_node.left: cur_node = cur_node.left else: node = stack.pop() print(node.val) if node.right: cur_node = node.right else: cur_node = None
Java版本
public void midOrderNoRecursion(TreeNode root) { if (root == null) { return; } Stack<TreeNode> stack = new Stack<>(); TreeNode curNode = root; while (!stack.isEmpty() || curNode != null) { if (curNode != null) { stack.add(curNode); } if (curNode != null && curNode.left != null) { curNode = curNode.left; } else { TreeNode node = stack.pop(); System.out.println(node.val); if (node.right != null) { curNode = node.right; } else { curNode = null; } } } }
关注源代码清单,技术人的学习清单
相关推荐
在"西门子SCL编程语言指导手册S7-SCL - Working with S7-SCL"中,你将学习到以下关键知识点: 1. **SCL基本概念**:了解SCL的编程环境,包括源代码编辑器、编译器和调试工具的使用。 2. **数据类型与变量声明**:...
1. **SCL基础知识**:介绍SCL的语法结构、基本元素和编程规则,包括变量声明、赋值操作、条件语句(IF...THEN...ELSE)、循环语句(WHILE, FOR)、函数调用等。 2. **数据类型和变量管理**:详述各种内置数据类型和...
压缩包含centos-release-scl-rh-2-3.el7.centos.noarch.rpm和centos-release-scl-2-3.el7.centos.noarch.rpm,主要用于centos7的gcc安装
官方离线安装包,亲测可用
例如,你可以定义一个包含多个元素的数组,如 ARRAY[1..10] OF REAL: myArray; 这创建了一个包含10个浮点数的数组。 在SCL中,函数块(FB)和组织块(OB)是程序的主要结构。OB用于定义周期性或事件驱动的程序段,...
离线安装包,亲测可用
1. **安装**:手册介绍了如何安装S7-SCL软件,确保用户能够顺利地在MS Windows 2000 Professional或XP Professional操作系统上设置编程环境。 2. **设计S7-SCL计划**:这部分详细讲解了如何创建S7-SCL程序,包括...
SIMATIC_S7-SCL_V5.6安装包-链接地址
官方离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用
S7-SCL 提供了高级语言结构,因此它适合用于计算和数据管理算法。
离线安装包,亲测可用
在西门子PLC的SCL编程中,S7-1200和S7-1500型号是两种广泛使用的可编程逻辑控制器。SCL(Structured Control Language)是一种高级编程语言,用于编写和处理西门子PLC的控制逻辑。SCL指令手册提供了针对S7-1200和S7-...
SIMATIC S7-SCL V5.1是一款适用于S7-300/S7-400系列PLC的高级编程软件,它支持在STEP 7环境中使用结构化控制语言(Structured Control Language,SCL)进行程序设计。SCL是一种高级编程语言,类似于Pascal或C语言,...
症状自评量表SCL90是心理学领域中的一种常用评估工具,旨在评估个体的心理症状及其严重程度。该评估工具共有90个项目,涵盖了情感、思维、行为、生活习惯、人际关系、饮食、睡眠等多方面。 SCL90的测验目的在于从多...
SCL编程语言包SIMATIC_S7SCL_V56/s7-300-400
《90项症状清单(SCL-90)量表》是心理健康领域中的一种常用评估工具,该量表由90个问题组成,涵盖了感觉、思维、情绪、意识、行为直至生活习惯、人际关系、饮食睡眠等多方面的内容。该量表广泛应用于心理辅导中,旨在...