题目描述

题解
/**
* 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
* }
* }
*/
// 递归写法
// 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
// 内存消耗:36.9 MB, 在所有 Java 提交中击败了9.96%的用户
import java.util.ArrayList
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>()
inOrder(root, res)
return res
}
public void inOrder(TreeNode root, List<Integer> res) {
if (root == null)
return
if (root.left != null)
inOrder(root.left, res)
res.add(root.val)
if (root.right != null)
inOrder(root.right, res)
}
}
// 非递归写法
// 执行用时:1 ms, 在所有 Java 提交中击败了43.22%的用户
// 内存消耗:37 MB, 在所有 Java 提交中击败了5.31%的用户
import java.util.Stack
import java.util.ArrayList
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>()
inOrderNR(root, res)
return res
}
public void inOrderNR(TreeNode root, List<Integer> res) {
Stack<TreeNode> stack = new Stack<>()
TreeNode cur = root
while (cur != null || !stack.isEmpty()) {
while (cur != null) {
stack.push(cur)
cur = cur.left
}
cur = stack.pop()
res.add(cur.val)
cur = cur.right
}
}
}