中序遍历思路:
使用颜色标记节点的状态,新节点为白色,已访问的节点为灰色。
如果遇到的节点为白色,则将其标记为灰色,然后将其右子节点、自身值,左子节点 依次入栈。
如果遇到的节点为灰色,则将节点的值输出。
java实现:
public List<Integer> inorderTraversal(TreeNode root) {
Deque<Object> stack = new LinkedList<>();
LinkedList<Integer> res = new LinkedList<>();
if (root == null)
return res;
stack.push(root);
while (!stack.isEmpty()) {
Object pop = stack.pop();
if (pop instanceof Integer) {
res.addLast((Integer) pop);
} else {
TreeNode treeNode = (TreeNode) pop;
if (treeNode.right != null) {
stack.push(treeNode.right);
}
stack.push(new Integer(treeNode.val));
if (treeNode.left != null) {
stack.push(treeNode.left);
}
}
}
return res;
}
leetcode94题