题目:leetcode144. 二叉树的前序遍历(迭代算法实现)
描述
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。
思路
通过栈使用迭代算法完成,比递归算法节省更多空间,递归算法会产生n个栈空间,迭代算法只需要一个栈空间,空间复杂度递归是O(n),迭代算法是O(1)。因为栈空间是有限的,所以使用递归算法在数据量很大的情况下有可能会产生栈溢出。
下面的代码中,我们使用result结果集存储要输出的数据,因为栈是先进后出,所以我们让右节点先进,左节点后进。
代码
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class Solution{
public List<Integer> preorderTraversal(TreeNode root)
{
if(root==null)
return new ArrayList<>();
List<Integer> result=new ArrayList<>();
Deque<TreeNode> deque=new LinkedList<>();
deque.push(root);
while(!deque.isEmpty())
{
TreeNode tmp=deque.pollLast();
result.add(tmp.val);
if(tmp.right!=null)
deque.push(tmp.right);
if(tmp.left!=null)
deque.push(tmp.left);
}
return result;
}
}