【Leetcode】94. Binary Tree Inorder Traversal

222 阅读1分钟

题目地址:

leetcode.com/problems/bi…

中序遍历二叉树。 用栈模拟递归。递归的过程是,从树根开始一路向左,同时记录住一路经过的节点,直到向左走到null后回退一步,打印节点,接着向其右子树拐过去,继续重复一路向左,直到右子树遍历完后,回退到树根的上一个节点,打印之,再拐入右子树继续重复。所以用栈来模拟的话就是,先从树根出发一路向左,同时将路径上所有节点按顺序入栈,直到走到null,走到null后,栈里弹出来一个节点就可以访问之了,因为其左子树是空。访问完后向右拐,如果右子树不空就继续上面一路向左的过程;否则就将栈里继续弹出一个节点并访问,然后继续向右拐重复上面的操作。代码如下:

import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.Deque;
import java.util.List;

public class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> res = new ArrayList<>();
        
        Deque<TreeNode> stack = new ArrayDeque<>();
        TreeNode cur = root;
        // cur != null对应的是右子树不空的情形,这时也要进行一路向左的操作;
        // 如果cur == null说明子树已经访问完了,要返回到子树根的父亲节点继续访问,然后向右拐,一路向左
        while (cur != null || !stack.isEmpty()) {
        	// 一路向左
            while (cur != null) {
                stack.push(cur);
                cur = cur.left;
            }
            // 走到null的时候就将栈顶弹出并访问,然后向右子树拐过去
            cur = stack.pop();
            res.add(cur.val);
            cur = cur.right;
        }
        
        return list;
    }
}

image.png 相关链接:

  1. 94. Binary Tree Inorder Traversal · leetcode
  2. (9条消息) 【Leetcode】94. Binary Tree Inorder Traversal_edWard的博客-CSDN博客
  3. happygirlzt