1.题目描述
给定一个二叉树的根节点
root
,返回 它的 中序 遍历 。示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]示例 2:
输入:root = []
输出:[]示例 3:
输入:root = [1]
输出:[1]提示:
树中节点数目在范围
[0, 100]
内
-100 <= Node.val <= 100
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
2.核心代码
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
private void inorder(TreeNode root, ArrayList<Integer> res) {
if (root == null) {
return;
}
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
}
3.测试代码
import java.util.List;
import java.util.ArrayList;
import java.util.LinkedList;
import java.lang.StringBuilder;
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;
}
}
// @solution-sync:begin
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
ArrayList<Integer> res = new ArrayList<>();
inorder(root, res);
return res;
}
private void inorder(TreeNode root, ArrayList<Integer> res) {
if (root == null) {
return;
}
inorder(root.left, res);
res.add(root.val);
inorder(root.right, res);
}
}
// @solution-sync:end
class Main {
public static void main(String[] args) {
TreeNode root = parseTreeNode(new Integer[]{1, null, 2, 3});
List<Integer> result = new Solution().inorderTraversal(root);
System.out.println(listToString(result));
}
private static TreeNode parseTreeNode(Integer[] values) {
TreeNode root = null;
java.util.LinkedList<TreeNode> nodes = new java.util.LinkedList<TreeNode>();
int i = 0;
while (i < values.length) {
if (i == 0) {
root = new TreeNode(values[i]);
i += 1;
nodes.addLast(root);
continue;
}
TreeNode parent = nodes.pop();
if (values[i] != null) {
TreeNode left = new TreeNode(values[i]);
parent.left = left;
nodes.addLast(left);
}
if (i + 1 < values.length && values[i + 1] != null) {
TreeNode right = new TreeNode(values[i + 1]);
parent.right = right;
nodes.addLast(right);
}
i += 2;
}
return root;
}
private static String listToString(List<Integer> list) {
StringBuilder buf = new StringBuilder();
buf.append("[");
for (int i = 0; i < list.size(); i++) {
if (i != 0)
buf.append(",");
buf.append(list.get(i));
}
buf.append("]");
return buf.toString();
}
}