94.二叉树的中序遍历
二叉树的中序遍历题目链接
- 中序遍历:左节点->头节点->右节点
- 方法一:递归法,很简单直接按中序遍历顺序写
List<Integer> results = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root==null){
return results;
}
inorderTraversal(root.left);
results.add(root.val);
inorderTraversal(root.right);
return results;
}
- 方法二:迭代法
- 先去找头节点最左边的叶子节点,再这个过程用栈来存储没利用到的节点,找到最左边的叶子节点后,栈中弹出它,它是一个"头节点",那么现在我们需要访问它的"右节点",如果有就去访问这个节点下的最左边的叶子节点,重复上边步骤,如果“右节点”不存在就让栈弹出栈顶元素进行下一轮的遍历
List<Integer> results;
public List<Integer> inorderTraversal(TreeNode root) {
results = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode p = root;
while(p!=null||!stack.isEmpty()){
while(p!=null){
stack.push(p);
p=p.left;
}
if(!stack.isEmpty()){
p=stack.pop();
results.add(p.val);
p=p.right;
}
}
return results;
}