给定一个二叉树的根节点 root ,返回它的 中序 遍历。【LeetCode Hot 100】

力扣热题100之第94题

方法一、递归法:

首先我们得知道什么是二叉树的中序遍历:左子树节点 - 根节点 - 右子树节点。就是遇到节点时,优先遍历该节点的左子树,等遍历完了再到根节点,最后是右子树。如下图所示:

那么这棵二叉树中序遍历的结果就为:4 2 8 6 5 7 1 3;

通过这个思路,我们就可以明白,当我们需要中序遍历一颗整树的时候,就得先遍历它的左子树,而遍历它的左子树,需要先遍历它的左子树的左子树,等等。所以我们就可以用递归来解决这个问题。具体代码为:

class Solution {

    List<Integer> answer = new ArrayList<>();
    public List<Integer> inorderTraversal(TreeNode root) {
        inorder(root);
        return answer;
    }

    public void inorder(TreeNode root){
        if(root == null){
            return;
        }
        inorder(root.left);
        answer.add(root.val);
        inorder(root.right);
    }
}

方法二、迭代法:

使用迭代法时,因为不能递归,所以在遍历节点时,需要将每个遍历过的节点存储起来,这里我们使用栈来辅助做题。具体代码为:

class Solution {
     public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> answer = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        TreeNode cur = root;

        while(cur != null || !stack.isEmpty()){
            while(cur != null){
            stack.push(cur);
            cur = cur.left;
            }
            TreeNode ret =  stack.pop();
            answer.add(ret.val);
            cur = ret.right;
        }
        return answer;
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_56960711/article/details/123334931