[LeetCode] 94. 中序遍历二叉树
2018-03-31 12:30
330 查看
传送门
例如:
给定二叉树 [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. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- [LeetCode] 94. 中序遍历二叉树
- LeetCode-94-Binary Tree Inorder Traversal 中序遍历二叉树
- 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 - Tree - 106. Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历重构二叉树)
- leetcode 题解:Binary Tree Inorder Traversal (二叉树的中序遍历)
- LeetCode:BInary Tree Inorder Traversal(二叉树的中序遍历)
- 二叉树系列 - 二叉搜索树 - [LeetCode] 中序遍历中利用 pre节点避免额外空间。题:Recover Binary Search Tree,Validate Binary Search Tree
- 【LeetCode】98. Validate Binary Search Tree 解法,中序遍历,搜索二叉树合法性
- 每天一道LeetCode-----根据中序遍历和后序遍历重构二叉树
- leetcode_94. Binary Tree Inorder Traversal 二叉树的中序遍历,非递归算法,栈的思想