Given a binary tree, return the inorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,3,2]
.
vector<int> inorderTraversal(TreeNode* root) {
if(!root) return {};
vector<int> res;
stack<TreeNode*> nodes;
TreeNode* pCurrent = root;
while(!nodes.empty() || pCurrent) {
if(pCurrent) {
nodes.push(pCurrent);
pCurrent = pCurrent->left;
} else {
TreeNode* tmp = nodes.top();
nodes.pop();
res.push_back(tmp->val);
pCurrent = tmp->right;
}
}
return res;
}
Or, it might ask for iterator
stack<TreeNode*> nodes;
BinaryTree (TreeNode* root) {
if(root->left) {
nodes.push_back(root);
root = root->left;
}
}
bool hasNext() {
return !nodes.empty();
}
int getNext() {
if(hasNext()) {
TreeNode* tmp = nodes.top();
nodes.pop();
if(tmp->right) {
TreeNode* node = tmp->right;
while(node) {
nodes.push_back(node);
node = node->left;
}
}
return tmp->val;
}
return -1;
}