题目:https://leetcode.cn/problems/binary-tree-inorder-traversal/
解法:
1.递归 时间:o(n) 空间:o(1)
class Solution {
List<Integer> res = new ArrayList<>();
public List<Integer> inorderTraversal(TreeNode root) {
if(root != null){
inorderTraversal(root.left);
res.add(root.val);
inorderTraversal(root.right);
}
return res;
}
}
2.栈 时间:o(n) 空间:o(n)
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
//左链入栈
while(curr != null){
stack.push(curr);
curr = curr.left;
}
//遍历当前栈
while(!stack.isEmpty()){
TreeNode node = stack.pop();
res.add(node.val);
//当前节点指到出栈节点的右节点
curr = node.right;
//当前节点再次左链入栈
while(curr != null){
stack.push(curr);
curr = curr.left;
}
}
return res;
}
}