[LeetCode]Binary Tree Preorder Traversal
2014-02-25 12:26
260 查看
题目描述
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)访问根结点。
(2)前序遍历左子树。
(3)前序遍历右子树 。
递归算法简洁明了、可读性好,但与非递归算法相比要消耗更多的时间和存储空间。按照题目要求我们采用一种非递归的二叉树遍历算法。非递归的实现要借助栈来实现,因为堆栈的先进后出的结构和递归很相似。
对于中序遍历来说,非递归的算法比递归算法的效率要高的多。其中前序遍历算法的实现的过程如下:
(1).初始化栈,根结点进栈;
(2).若栈非空,弹出栈顶元素。将弹出的栈顶结点的右孩子(如果有的话)结点进栈;将弹出的栈顶结点的左孩子(如果有的话)结点进栈;。
(3).重复执行(2),直至栈为空。
代码
/** * Definition for binary tree * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ public class Solution { public ArrayList<Integer> preorderTraversal(TreeNode root) { ArrayList<Integer> res = new ArrayList<Integer>(); if(root == null) return res; Stack<TreeNode> st = new Stack<TreeNode>(); st.push(root); while(!st.isEmpty()){ TreeNode cur = st.peek(); res.add(cur.val); st.pop(); if(cur.right != null) st.push(cur.right); if(cur.left != null) st.push(cur.left); } st = null; return res; } }
相关文章推荐
- [LeetCode] Construct Binary Tree from Preorder and Inorder Traversal
- Binary Tree Preorder Traversal - LeetCode 144
- LeetCode 144 Binary Tree Preorder Traversal
- LeetCode | Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 105. Construct Binary Tree from Preorder and Inorder Traversal
- leetcode_105_Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode - Binary Tree Preorder Traversal
- Leetcode 105. Construct Binary Tree from Preorder and Inorder Traversal
- Construct Binary Tree from Preorder and Inorder Traversal -- LeetCode
- 【LeetCode】C# 105、Construct Binary Tree from Preorder and Inorder Traversal
- leetcode: Binary Tree Preorder Traversal
- [Leetcode]105. Construct Binary Tree from Preorder and Inorder Traversal
- 【leetcode】Binary Tree Preorder Traversal
- LeetCode | Binary Tree Preorder Traversal
- leetcode :Binary Tree Preorder Traversal
- LeetCode---Binary Tree Preorder Traversal
- [LeetCode]105 Construct Binary Tree from Preorder and Inorder Traversal
- leetCode:Binary Tree Postorder Traversal,Binary Tree Preorder Traversal--JAVA version
- 【leetcode】105. Construct Binary Tree from Preorder and Inorder Traversal
- LeetCode 144 — Binary Tree Preorder Traversal(C++ Java Python)