leetcode94. 二叉树的中序遍历(迭代法实现)
描述
给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。
思路
首先我们假设一下看到一棵树,我们自己是怎么中序遍历它的。是不是眼睛看到最后一个左节点然后输出左节点、中间节点、右节点?对的,那我们也用代码这样来实现就可以了。我们先找到最左边的节点,中途不断将沿途的节点压入栈,最后遇到null之后弹出栈的最后一个元素,再输出这个节点,接着遍历右节点。
代码
import java.util.ArrayList;
import java.util.Deque;
import java.util.LinkedList;
import java.util.List;
public class Solution {
public List<Integer> inorderTraversal(TreeNode root)
{
if(root==null)
return new ArrayList<>();
List<Integer> result=new ArrayList<>();
Deque<TreeNode> deque=new LinkedList<>();
TreeNode tmp=root;
while(!deque.isEmpty() || tmp!=null)
{
if(tmp!=null)
{
deque.push(tmp);
tmp=tmp.left;
}
else{
tmp=deque.pop();
result.add(tmp.val);
tmp=tmp.right;
}
}
return result;
}
}