1、首先建立一个栈和链表
2、判断root为空
3、遍历根节点和左子节点并且都放入链表和栈里
4、然后每推出一个栈顶元素就遍历该元素的右子节点 并且放入栈和链表里
5、返回链表
/**
* 迭代法实现前序遍历
*/
public List<Integer> preOrderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
if (root == null) {
return res;
}
Deque<TreeNode> stack = new LinkedList<>();
TreeNode node = root;
while (!stack.isEmpty() || node != null) {
while (node != null) {
res.add(root.val);
stack.push(root);
root = root.left;
}
root = stack.pop();
root = root.right;
}
return res;
}