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 类似,只不过变成中序遍历,把前序遍历的代码拿出来, ...
随机推荐
- Sqrt(int x) leetcode java
Reference: http://blog.csdn.net/lbyxiafei/article/details/9375735 题目: Implement int sqrt(int x). Co ...
- C#: 实现支持断点续传多线程下载
/* .Net/C#: 实现支持断点续传多线程下载的 Http Web 客户端工具类 (C# DIY HttpWebClient)* Reflector 了一下 System.Net.WebClien ...
- sass与less
刚刚发现sass这个东西,前端真热闹,下面比较一下这两者的共同点与区别. 开头总结一下,方便记忆:sass依赖后端计算能力,less依赖客户端的计算能力. 很多开发者不选择LESS是因为LESS输出修 ...
- [mysql] C++操作mysql方法总结(1)
From: http://www.cnblogs.com/magicsoar/p/3817518.html C++通过mysql的c api和通过mysql的Connector C++ 1.1.3操作 ...
- [Bash] Create Aliases in .bash_profile for Common Bash Commands
.bash_profile is a file that bash invokes (or more technically sources) before the start of a new ba ...
- QQ2010如何开启透明效果皮肤
QQ2010可在WIN7下实现皮肤透明效果. 腾讯已于近日发布了QQ2010的BETA版本,经笔者试验,可在WIN7下实现皮肤透明化效果. 设置如下: 1.先打开QQ皮肤控制面板,如下: 2.然后任选 ...
- Discuz常见大问题-如何允许用户插入视频-如何自己在页面中插入视频
从视频的下面分享中获取html代码 然后粘贴到你创建页面的指定位置(注意从优酷复制的视频宽度和高度可能比较小,你可以自己调整,或者占据100%) 最终的实现效果
- linux下apache的使用
Linux安装配置apache http://www.cnblogs.com/fly1988happy/archive/2011/12/14/2288064.html 1.获取软件: http://h ...
- EL运算符(web基础学习笔记十七)
一.EL语法 1.1.语法结构 ${expression} 1.2.[]与.运算符 EL 提供.和[]两种运算符来存取数据. 当要存取的属性名称中包含一些特殊字符,如.或?等并非字母或数字的符号,就一 ...
- 使用javacv录像,同时进行讯飞声纹认证
由于最近的demo中需要在活体检测的同时进行音视频录制 , 尝试使用MediaRecord和camera来录制视频 , 然而Camera.onPreviewFrame 不能与 MediaRecord ...