[LeetCode] 144. Binary Tree Preorder Traversal 二叉树的先序遍历
2018-03-01 07:27
549 查看
Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[1,2,3].
Note: Recursive solution is trivial, could you do it iteratively?
树的遍历,最常见的有先序遍历,中序遍历,后序遍历和层序遍历,它们用递归实现起来都非常的简单。而题目的要求是不能使用递归求解。
1. 用迭代和stack。2. Morris Traversal Solution
Python: Stack, Time: O(n), Space: O(h) # h is the height of the tree
class Solution2(object): def preorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ result, stack = [], [(root, False)] while stack: root, is_visited = stack.pop() if root is None: continue if is_visited: result.append(root.val) else: stack.append((root.right, False)) stack.append((root.left, False)) stack.append((root, True)) return result
Python: Morris, Time: O(n), Space: O(1)
class Solution(object): def preorderTraversal(self, root): """ :type root: TreeNode :rtype: List[int] """ result, curr = [], root while curr: if curr.left is None: result.append(curr.val) curr = curr.right else: node = curr.left while node.right and node.right != curr: node = node.right if node.right is None: result.append(curr.val) node.right = curr curr = curr.left else: node.right = None curr = curr.right return result
类似题目:
相关文章推荐
- leetcode 题解:Binary Tree Preorder Traversal (二叉树的先序遍历)
- LeetCode:Binary Tree Preorder Traversal(二叉树的先序遍历)
- 【leetcode】二叉树先序遍历(stack)
- [leetcode]二叉树先序遍历
- LeetCode 144 Binary Tree Preorder Traversal (先序遍历二叉树)
- 【LeetCode】144. Binary Tree Preorder Traversal 二叉树先序遍历的非递归实现
- Leetcode Binary Tree Preorder Traversal 二叉树先序遍历
- 【LeetCode】144. Binary Tree Preorder Traversal-二叉树先序遍历
- [LeetCode]105 根据先序遍历和中序遍历构建二叉树
- [LeetCode] Binary Tree Preorder Traversal 二叉树的先序遍历
- leetcode_100题——Same Tree (二叉树的递归-先序遍历)
- [leetcode]_根据二叉树的先序遍历(后序遍历) + 中序遍历 重建二叉树
- LeetCode Binary Tree Preorder Traversal (二叉树先序遍历非递归)
- 【leetcode】非递归先序遍历二叉树(Binary Tree Preorder Traversal)
- 每天一道LeetCode-----根据先序遍历和中序遍历还原二叉树
- [leetcode-二叉树先序遍历]--144.Binary Tree Preorder Traversal
- [LeetCode]144 二叉树先序遍历
- LeetCode 863. 二叉树中所有距离为 K 的结点
- leetcode 104求二叉树的最大深度
- LeetCode 298. Binary Tree Longest Consecutive Sequence(二叉树最长连续序列)