class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
//非递归遍历中序二叉树
Stack<TreeNode> s = new Stack<TreeNode>();
List<Integer> res = new ArrayList<Integer>();
TreeNode p = root;
while(p!=null||s.size()>0){
while(p!=null){
s.push(p);
p = p.left;
}
//此时p = null 有两种情况,左子树为空,退栈,访问中间节点。
// 右子树为空,退栈,此时为栈中保留的是该节点的前驱节点,继续访问右节点
p = s.pop();
res.add(p.val);
p = p.right;
}
return res;
}
}