二叉树的前序非递归遍历
前序遍历的顺序是根节点-》左子树节点-》右子树节点
思路:创建一个list存储节点、stack来记录节点,以便返回。
1、将current指针指向root
2、遍历每棵左子树,current=current.left,将结果分别压栈和加入list中,直到left==null
3、弹出栈,current=current.right,重复2
4、如果current为空,栈为空,遍历结束
public List<Integer> preorderTraversal(TreeNode root)
{
List<Integer> list=new ArrayList<Integer>();
Stack<TreeNode> stack=new Stack<TreeNode>();
TreeNode current=root;
while(current!=null||!stack.isEmpty())
{
if(current!=null)
{
list.add(current.val);
stack.push(current);
current=current.left;
}else{
current=stack.pop();
current=current.right;
}
}
return list;
}