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;
}
本文介绍了一种实现二叉树中序遍历的方法,包括递归与迭代两种方式。通过栈结构来辅助实现非递归的中序遍历,并提供了一种迭代器模式的应用思路。
736

被折叠的 条评论
为什么被折叠?



