非递归的二叉树中序遍历
使用stack来解这道题
步骤:1、初始化空栈stack
2、初始化current指针,先指向root
3、将current压入栈,并使得current=current.left直到current为空
4、如果current为空,stack不为空
1)将值从stack中弹出,current=stack.pop();
2)list.add(current);
3)current=current.right
4)重复3
5、如果current为空,stack也为空,遍历结束
按照以上步骤,实现代码如下:
public List<Integer> inorderTraversal(TreeNode root)
{
List<Integer> list = new ArrayList<Integer>();
Stack<TreeNode> stack = new Stack<TreeNode>();
TreeNode current = root;
while(!stack.isEmpty()||current!=null)
{
if(current!=null)
{
stack.push(current);
current=current.left;
}else
{
current=stack.pop();
list.add(current.val);
current=current.right;
}
}
return list;
}