1 非递归中序遍历
/**
* 非递归中序遍历二叉树
*/
public ArrayList<TreeNode> inorderTraversal(TreeNode t) {
if (t == null) {
return null;
}
Stack<TreeNode> stack = new Stack<>();
ArrayList<TreeNode> aList = new ArrayList<>();
TreeNode p = t;
while (p != null || !stack.isEmpty()) {
// 如果目前访问的节点不为空,则尝试先访问它的左子树
if (p != null) {
stack.push(p);
// 开始访问左子树
p = p.left;
}
// 如果 p为null说明访问的左节点为空,将先前压入栈的父节点pop,打印,并且开始访问右子树
else {
p = stack.pop();
// 打印父节点
aList.add(p);
// 开始访问右子树
p = p.right;
}
}
return aList;
}