From 85ea486fd2e5d48a2a95ed3387450ec3f763135a Mon Sep 17 00:00:00 2001 From: Wonder Date: Mon, 6 Oct 2025 21:56:02 +0800 Subject: [PATCH] =?UTF-8?q?=20=F0=9F=94=84Update:=20=E4=BA=8C=E5=8F=89?= =?UTF-8?q?=E6=A0=91=E7=9A=84=E4=B8=AD=E5=BA=8F=E9=81=8D=E5=8E=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 二叉树/1. 二叉树的中序遍历.md | 114 ++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 二叉树/1. 二叉树的中序遍历.md diff --git a/二叉树/1. 二叉树的中序遍历.md b/二叉树/1. 二叉树的中序遍历.md new file mode 100644 index 0000000..b4f5aa8 --- /dev/null +++ b/二叉树/1. 二叉树的中序遍历.md @@ -0,0 +1,114 @@ +# 二叉树的中序遍历 + +## 题目 +给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。 + + + +示例 1: + + +输入:root = [1,null,2,3] +输出:[1,3,2] +示例 2: + +输入:root = [] +输出:[] +示例 3: + +输入:root = [1] +输出:[1] + + +提示: + +树中节点数目在范围 [0, 100] 内 +-100 <= Node.val <= 100 + + +进阶: 递归算法很简单,你可以通过迭代算法完成吗? + +## 思路 + +- 递归 +- 迭代 + +## 代码 + +- 递归 + +```java +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +class Solution { + public List inorderTraversal(TreeNode root) { + // Init: Res + List res = new ArrayList<>(); + inorder(root, res); + return res; + } + + public void inorder(TreeNode root, List res) { + if (root == null) { + return; + } + inorder(root.left, res); + res.add(root.val); + inorder(root.right, res); + } +} +``` + +- 迭代 + +```java +/** + * Definition for a binary tree node. + * public class TreeNode { + * int val; + * TreeNode left; + * TreeNode right; + * TreeNode() {} + * TreeNode(int val) { this.val = val; } + * TreeNode(int val, TreeNode left, TreeNode right) { + * this.val = val; + * this.left = left; + * this.right = right; + * } + * } + */ +class Solution { + public List inorderTraversal(TreeNode root) { + // Init: stack, res + Deque stack = new LinkedList<>(); + List res = new ArrayList<>(); + TreeNode cur = root; + // Traverse 1: Judge + while (cur != null || stack.size() > 0) { + // Traverse 2: Add + while (cur != null) { + stack.push(cur); + cur = cur.left; + } + cur = stack.peek(); + stack.pop(); + res.add(cur.val); + cur = cur.right; + } + return res; + } +} +``` \ No newline at end of file