题目:
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3] 1 \ 2 / 3 输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
代码实现:
前序遍历的通用实现可以查看博客:二叉树遍历系列--前序遍历
递归版本:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private List<Integer> preorder = new ArrayList<Integer>(); public List<Integer> preorderTraversal(TreeNode root) { if (root == null) return preorder; preorder.add(root.val); preorderTraversal(root.left); preorderTraversal(root.right); return preorder; } }
非递归版本:
/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */ class Solution { private List<Integer> preorder = new ArrayList<Integer>(); public List<Integer> preorderTraversal(TreeNode root) { if (root == null) return preorder; Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode p = root; while(p != null) { preorder.add(p.val); if (p.right != null) stack.push(p.right); p = p.left; if (p == null && !stack.isEmpty()) { p = stack.pop(); } } return preorder; } }