Problem #94 (Binary Tree Inorder Traversal | Binary Tree, Depth-First Search, Stack, Tree)
Given the root
of a binary tree, return the inorder traversal of its nodes' values.
root = [1,null,2,3]
[1,3,2]
root = []
[]
root = [1]
[1]
- The number of nodes in the tree is in the range
[0, 100]
. -100 <= Node.val <= 100
- Java
class Solution {
public List<Integer> inorderTraversal(TreeNode root) {
Stack<TreeNode> stack = new Stack<TreeNode>();
List<Integer> list = new ArrayList<Integer>();
TreeNode curr = root;
while(curr != null | !stack.isEmpty()){
while(curr != null){
stack.add(curr);
curr = curr.left;
}
curr = stack.pop();
list.add(curr.val);
curr = curr.right;
}
return list;
}
}
- C++
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
stack<TreeNode*> stack;
vector<int> list;
TreeNode* curr = root;
while(curr != NULL || !stack.empty()){
while(curr != NULL){
stack.push(curr);
curr = curr->left;
}
curr = stack.top();
stack.pop();
list.push_back(curr->val);
curr = curr->right;
}
return list;
}
};
- Python
class Solution(object):
def inorderTraversal(self, root):
list = []
stack = []
curr = root
while curr or len(stack):
while curr:
stack.append(curr)
curr = curr.left
curr = stack.pop()
list.append(curr.val)
curr = curr.right
return list
- Time:
O(n)
- Space:
O(n)
- Ruby
class TreeNode
attr_accessor :val, :left, :right
def initialize(val = 0, left = nil, right = nil)
@val = val
@left = left
@right = right
end
end
def inorder_traversal(root)
result = []
stack = []
current = root
while current || stack.length > 0
while current
stack.push(current)
current = current.left
end
current = stack.pop()
result << current.val
current = current.right
end
result
end