原题链接:https://leetcode-cn.com/problems/binary-tree-preorder-traversal
原题:
给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
这道题使用递归的方法比较简单,所以尝试使用迭代法解决。
思路:
首先声明一个栈,需要将根节点入栈,然后在栈不空的话执行循环操作。 需要将栈顶元素出栈,然后将结果记录,然后看其是否包含左右子树,包含则将左右子树入栈。
值的注意的是:因为是前序遍历,需要先判断右子树是否为空,再判断左子树。
源码如下:
用到的数据结构TreeNode在题目中。
public List<Integer> preorderTraversal(TreeNode root) { LinkedList<Integer> result = new LinkedList<>(); Stack<TreeNode> stack = new Stack<>(); if (root == null) return result; //访问根节点,入栈 stack.add(root); while(!stack.isEmpty()){ TreeNode node = stack.pop() result.add(node.val); if(node.right!=null) { stack.add(node.right); } if(node.left!=null) { stack.add(node.left); } } return result; }