class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> res; if (root == NULL) return res; vector<pair<TreeNode*, bool> > stack; stack.push_back(make_pair(root, false)); while (!stack.empty()) { pair<TreeNode*, bool>& pn = stack.back(); TreeNode* n = pn.first; if (pn.second) { stack.pop_back(); res.push_back(n->val); if (n->right != NULL) { stack.push_back(make_pair(n->right, false)); } continue; } pn.second = true; n = n->left; while (n != NULL) { stack.push_back(make_pair(n, true)); n = n->left; } } } // a better one vector<int> _inorderTraversal(TreeNode *root) { vector<int> res; vector<TreeNode*> stack; while(root != NULL || !stack.empty()) { while (root != NULL) { stack.push_back(root); root=root->left; } if (!stack.empty()) { root = stack.back(); stack.pop_back(); res.push_back(root->val); root = root->right; } } } };
这种题想想简单,写起来也不好写,尤其是写的像第二个那么巧妙简洁,又找到一个比较通用的可以用在中序遍历和后续遍历中
class Solution { public: vector<int> inorderTraversal(TreeNode *root) { vector<int> res; if (root == NULL) return res; vector<pair<TreeNode*, bool> > stack; stack.push_back(make_pair(root, false)); while (!stack.empty()) { pair<TreeNode*, bool>& pn = stack.back(); TreeNode* n = pn.first; stack.pop_back(); if (pn.second) { res.push_back(n->val); } else { if (n->right != NULL) { stack.push_back(make_pair(n->right, false)); } stack.push_back(make_pair(n, true)); if (n->left != NULL) { stack.push_back(make_pair(n->left, false)); } } } return res; } };
LeetCode Binary Tree Inorder Traversal,布布扣,bubuko.com
LeetCode Binary Tree Inorder Traversal
原文:http://www.cnblogs.com/lailailai/p/3615605.html