二叉树的中序遍历
- 递归方法
class Solution {
List<Integer> res = new LinkedList<>();
public List<Integer> inorderTraversal(TreeNode root) {
inorder(root);
return res;
}
public void inorder(TreeNode root) {
if (root != null) {
inorder(root.left);
res.add(root.val);
inorder(root.right);
}
}
}
- 迭代法
class Solution {
List<Integer> res = new LinkedList<>();
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<>();
while (root != null || !stack.empty()) {
while (root != null) {
stack.add(root);
root = root.left;
}
if (!stack.empty()) {
TreeNode node = stack.pop();
res.add(node.val);
if (node.right != null) {
root = node.right;
}
}
}
return res;
}
}