二叉树的中序历遍,非递归算法,使用栈进行深度优先历遍,在每个节点pop出栈的时候访问即可。
public List<Integer> inorderTraversal(TreeNode root) {
LinkedList<Integer> l = new LinkedList<Integer>();
Stack<TreeNode> s = new Stack<TreeNode>();
if (root==null)return l;
TreeNode n =root;
//l.add(n.val);
s.push(n);
while (true) {
while (n.left != null) {
n = n.left;
s.push(n);
//l.add(n.val);
}
if(s.isEmpty())break;
else {
n=s.pop();
l.add(n.val);
while (n.right==null&&!s.isEmpty()) {
n=s.pop();
l.add(n.val);
}
if(n.right==null&&s.isEmpty())break;
n=n.right;
//l.add(n.val);
s.push(n);
}
}
return l;
}