leetcode刷题:二叉树02(二叉树的中序遍历)

71 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

94.二叉树的中序遍历

力扣题目链接 在这里插入图片描述

package com.programmercarl.tree;

import java.util.ArrayList;
import java.util.List;

/**
 * @ClassName InorderTraversal
 * @Descriotion TODO
 * @Author nitaotao
 * @Date 2022/7/1 15:32
 * @Version 1.0
 * https://leetcode.cn/problems/binary-tree-inorder-traversal/
 * 94. 二叉树的中序遍历
 **/
public class InorderTraversal {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> result = new ArrayList<Integer>();
        traversal(root, result);
        return result;
    }

    /**
     * 中序遍历
     * @param root
     * @param result
     */
    public void traversal(TreeNode root, List<Integer> result) {
        if(root==null) {
            return;
        }
        //左中右
        traversal(root.left, result);
        result.add(root.val);
        traversal(root.right, result);
    }
}

在这里插入图片描述

迭代法:这里要把结点分为左、右结点即可,先去找左,找完左后,再看右。

    public List<Integer> inorderTraversal2(TreeNode root) {
        List<Integer> result = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();
        //中序遍历,左中右
        while (root != null || !stack.isEmpty()) {
            if (root != null) {
                stack.push(root);
                root = root.left;
            }else{
                root= stack.pop();
                result.add(root.val);
                root = root.right;
            }
        }
        return result;
    }

在这里插入图片描述