[LeetCode] 94. 中序遍历二叉树
2018-03-31 12:30
387 查看
传送门
例如:
给定二叉树 [1,null,2,3],
返回 [1,3,2].
说明: 递归算法很简单,你可以通过迭代算法完成吗?
使用一个栈来存储二叉树节点,根据中序遍历的规则,我们可以推算出这样的规律:
1. 将当前非空节点入栈
2. 如果左子节点不为空,则继续将左子节点入栈
3. 如果左子节点为空,则抛出栈顶节点并记录 val 值,然后将其右子节点入栈
4. 重复 1、2、3 步骤直至栈空
AC 代码:
题目描述
给定一个二叉树,返回其中序遍历。例如:
给定二叉树 [1,null,2,3],
1 \ 2 / 3
返回 [1,3,2].
说明: 递归算法很简单,你可以通过迭代算法完成吗?
我的想法
题中说明了要求使用迭代法使用一个栈来存储二叉树节点,根据中序遍历的规则,我们可以推算出这样的规律:
1. 将当前非空节点入栈
2. 如果左子节点不为空,则继续将左子节点入栈
3. 如果左子节点为空,则抛出栈顶节点并记录 val 值,然后将其右子节点入栈
4. 重复 1、2、3 步骤直至栈空
AC 代码:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { public List<Integer> inorderTraversal(TreeNode root) { Stack<TreeNode> stack = new Stack<>(); List<Integer> list = new ArrayList<>(); while(true){ if (root != null){ stack.push(root); root = root.left; } else { if (stack.empty()) { return list; } root = stack.pop(); list.add(root.val); root = root.right; } } } }
相关文章推荐
- LeetCode 94 Binary Tree Inorder Traversal(二叉树的中序遍历)+(二叉树、迭代)
- [LeetCode] 94. 中序遍历二叉树
- LeetCode 94 Binary Tree Inorder Traversal (中序遍历二叉树)
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- LeetCode-94-Binary Tree Inorder Traversal 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- leetcode 题解:Binary Tree Inorder Traversal (二叉树的中序遍历)
- [LeetCode] 94. Binary Tree Inorder Traversal 二叉树的中序遍历
- LeetCode基础--二叉树--中序遍历
- leetcode | 二叉树的前序遍历、中序遍历、后续遍历的非递归实现
- LeetCode(Construct Binary Tree from Preorder and Inorder Traversal )根据二叉树的中序遍历和后序遍历重建二叉树
- [leetcode]Construct Binary Tree from Preorder and Inorder Traversal(根据前序、中序遍历确定一棵二叉树 C语言)
- Leetcode 94 Binary Tree Inorder Traversal 二叉树