144 递归 + 中序遍历
题目描述
算法思路说明
为了解决遍历顺序和处理顺序不一致的问题,将遍历过但是暂不处理的打上标记,碰到带标记的则将标记与节点本身出栈
对应JAVA代码
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> result = new ArrayList<Integer>();
Deque <TreeNode> st = new LinkedList<TreeNode>();
TreeNode node = root;
if(node != null) {st.offerFirst(node);}
while(!st.isEmpty()){
node = st.pollFirst();
if(node != null){ // 前、后序遍历在这里调整下顺序即可
if(node.right != null) {st.offerFirst(node.right);}
st.offerFirst(node);
st.offerFirst(null); // 使用null值作为标记
if(node.left != null) {st.offerFirst(node.left);}
} else{
node = st.pollFirst();
result.add(node.val);
}
}
return result;
}
}