第一种方法:
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> result;
stack<TreeNode*> s;
if (root == NULL)
return result;
s.push(root); //将根节点入栈
while (!s.empty())
{
TreeNode *p = s.top();
result.push_back(p->val);
s.pop();
if (p->right != NULL)
s.push(p->right); //先将右孩子入栈
if (p->left != NULL)
s.push(p->left); //再将左孩子入栈
}
return result;
}
第二种方法:
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> result;
stack<TreeNode*> s;
if (root == NULL)
return result;
TreeNode *p = root;
while (p != NULL || !s.empty())
{
while (p != NULL)
{
result.push_back(p->val);
s.push(p);
p = p->left;
}
if (!s.empty())
{
p = s.top();
s.pop();
p = p->right;
}
}
return result;
}