题目
给定一个二叉树,返回它的前序遍历。
思想
二叉树的前序遍历是根左右,这个稍微比中序遍历和后序遍历好理解。以c++使用非递归形式实现。
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> s; //初始化一个栈
TreeNode* p = root;
while(p || !s.empty()){
if(p){
result.push_back(p->val);
s.push(p);
p = p->left;
}
else //如果左节点不存在,就向当前节点的右节点探寻
{
p = s.top(); //取栈顶节点
s.pop(); //栈顶节点出栈
p = p->right;
}
}
return result;
}