LeetCode94 Binary Tree Inorder Traversal(迭代实现) Java
题目:
Given a binary tree, return the inorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
return [1,3,2].
分析:
中根遍历二叉树,也就是说,对树中的不论什么一个节点,先訪问其左子树,再訪问根节点,最后訪问其右子树。通过迭代的方式实现中根遍历二叉树,须要借助栈。
在遍历二叉树前,须要做点准备工作:包装每个树节点。包装后的节点中。除了树节点本身。还有还有一个域,用于指示这个节点的左子树是否已经被訪问过了。
算法的详细过程是这种:
(1)把根节点入栈
(2)进入循环。循环中是这种,当栈非空时,看看栈顶节点的左孩子是否存在,假设存在且没有被訪问过。就把它的左孩子入栈,否则,就把该节点弹栈,訪问该节点,并看看它的右孩子是否存在。假设存在,就把它的右孩子入栈。
详细代码例如以下:
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> resultList = new ArrayList<Integer>();
if (root == null) {
return resultList;
}
LinkedList<TreeNodeWithFlag> stack = new LinkedList<>();
stack.push(new TreeNodeWithFlag(root, false));
while (!stack.isEmpty()) {
TreeNodeWithFlag temp = stack.peek();
if (temp.getTreeNode().left != null && !temp.flag) {
stack.push(new TreeNodeWithFlag(temp.getTreeNode().left, false));
// 当temp再次处于栈顶时。它的左子树必然已经被訪问过了
temp.setFlag(true);
} else {
resultList.add(temp.getTreeNode().val);
stack.pop();
if (temp.getTreeNode().right != null) {
stack.push(new TreeNodeWithFlag(temp.getTreeNode().right, false));
}
}
}
return resultList;
}
private static class TreeNodeWithFlag {
private TreeNode treeNode;
// 表示该节点的左子树是否被訪问过
private boolean flag;
private TreeNodeWithFlag(TreeNode treeNode, boolean flag) {
super();
this.treeNode = treeNode;
this.flag = flag;
}
public TreeNode getTreeNode() {
return treeNode;
}
public void setTreeNode(TreeNode treeNode) {
this.treeNode = treeNode;
}
public boolean isFlag() {
return flag;
}
public void setFlag(boolean flag) {
this.flag = flag;
}
@Override
public String toString() {
return "TreeNodeWithFlag [treeNode=" + treeNode + ", flag=" + flag
+ "]";
}
}
LeetCode94 Binary Tree Inorder Traversal(迭代实现) Java的更多相关文章
- (二叉树 递归) leetcode94. Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- LeetCode94. Binary Tree Inorder Traversal
题目 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 考点 stack ...
- Leetcode94. Binary Tree Inorder Traversal二叉树的中序遍历(两种算法)
给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? 递归: class So ...
- LeetCode 94. 二叉树的中序遍历(Binary Tree Inorder Traversal)
94. 二叉树的中序遍历 94. Binary Tree Inorder Traversal 题目描述 给定一个二叉树,返回它的 中序 遍历. LeetCode94. Binary Tree Inor ...
- [leetcode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
题目大意 https://leetcode.com/problems/binary-tree-inorder-traversal/description/ 94. Binary Tree Inorde ...
- 61. Binary Tree Inorder Traversal
Binary Tree Inorder Traversal My Submissions QuestionEditorial Solution Total Accepted: 123484 Total ...
- LintCode Binary Tree Inorder Traversal
Binary Tree Inorder Traversal Given a binary tree, return the inorder traversal of its nodes' values ...
- 37. Binary Tree Zigzag Level Order Traversal && Binary Tree Inorder Traversal
Binary Tree Zigzag Level Order Traversal Given a binary tree, return the zigzag level order traversa ...
- 3月3日(4) Binary Tree Inorder Traversal
原题: Binary Tree Inorder Traversal 和 3月3日(2) Binary Tree Preorder Traversal 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...
随机推荐
- 如何在Linux中发现IP地址冲突
导读 你们都知道什么是IP地址,是吧?它们被分配给网络上的设备来代表它们.它们通过DHCP服务器分配并且会经常改变.现在有两种IP地址.动态的一种会经常改变(几天一次),而静态的就如它的名字那样是静态 ...
- mysql时间操作函数和存储过程
因为业务须要统计一批数据.用到关于mysql的时间操作函数和存储过程,问题已经基本解决.把过程记录下: 1. mysql的语句中不支持直接用循环.循环仅仅能在存储过程中使用. 2. 写为文件时,注意一 ...
- (字符串)最长公共字串(Longest-Common-SubString,LCS)
题目: 给定两个字符串X,Y,求二者最长的公共子串,例如X=[aaaba],Y=[abaa].二者的最长公共子串为[aba],长度为3. 子序列是不要求连续的,字串必须是连续的. 思路与代码: 1.简 ...
- 浅谈JavaScript框架设计
在这个js框架随处乱跑的时代,你是否考虑过写一个自己的框架?下面的内容也许会有点帮助. 一个框架应该包含哪些内容? 1.语言扩展 大部分现有的框架都提供了这部分内容,语言扩展应当是以ECMAScrip ...
- Jmeter相关
关于Jmeter,这里有一篇文章可以看看:http://www.cnblogs.com/TankXiao/p/4045439.html 给有需要的同学.
- Java从零开始学二十一(集合List接口)
一.List接口 List是Collection的子接口,里面可以保存各个重复的内容,此接口的定义如下: public interface List<E> extends Collecti ...
- JAVA中AES对称加密和解密
AES对称加密和解密 package demo.security; import java.io.IOException; import java.io.UnsupportedEncodingExce ...
- 使用 Spring 2.5 TestContext 测试框架
Spring 2.5 TestContext 测试框架用于测试基于 Spring 的程序,TestContext 测试框架和低版本 Spring 测试框架没有任何关系,是一个全新的基于注解的测试框架, ...
- python之函数用法divmod
# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之函数用法divmod #http://python.jobbole.com/81480/ #d ...
- 13、java中8中基本类型
一.基本类型介绍 关键字 数据类型 占用字节数 取值范围 默认值 byte 字节型 1个字节 -128~127 0 char 字符型 2个字节 Unicode0~Unicode215-1 \u0000 ...