给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
通过此题掌握二叉树的前序遍历,掌握Java泛型和栈的使用
题目分析:
二叉树的前序遍历,用递归遍历很容易实现,但如果用迭代算法就有一定的难度;
二叉树的前序遍历,顺序是——“根左右”(根节点,左子树,右子树),对于遍历,我们从根结点开始,访问到根结点入列表,接下来我们希望一直访问到的是左子树,右子树一定是最后访问到的,那当我们访问到右子树的时候我们此时并不需要将它入列表,那么就先将它入栈,等到需要它入列表的时候再取出来;
代码实现:
非递归:
public static class TreeNode { int data; TreeNode left; TreeNode right; TreeNode(int val) { data = val; } } /** * 非递归 */ public List<Integer> preorderTraversal(TreeNode root) { List<Integer