先序递归:
void preorderTraversalDFS(TreeNode* root, vector<int>& result) {
if (root)
result.push_back(root->val);
else
return;
if (root->left)
preorderTraversalDFS(root->left, result);
if (root->right)
preorderTraversalDFS(root->right, result);
}
迭代:
vector<int> preorderTraversal(TreeNode* root) {
if (!root)
return _result;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty())
{
while (node)
{
_result.push_back(node->val);
s.push(node);
node = node->left;
}
if (!s.empty())
{
node = s.top();
s.pop();
node = node->right;
}
}
return _result;
}
中序递归:
void preorderTraversalDFS(TreeNode* root, vector<int>& result) {
if (!root)
return;
if (root->left)
preorderTraversalDFS(root->left, result);
if (root)
result.push_back(root->val);
if (root->right)
preorderTraversalDFS(root->right, result);
}
迭代:太简单了....
后序递归: 左右根不写了
后序迭代:其实就是reverse前序
vector<int> postorderTraversal(TreeNode* root) {
if (!root)
return _result;
stack<TreeNode*> s;
TreeNode* node = root;
while (node || !s.empty())
{
if (node) {
s.push(node);
_result.insert(_result.begin(), node->val);
node = node->right;
}
else
{
TreeNode *t = s.top(); s.pop();
node = t->left;
}
}
return _result;
}