二叉树的前序遍历
二叉树的前序遍历过程相当于先访问最左边路径上的所有节点,然后在从后往前访问各个节点的右子树,
因此应该想到要使用栈结构。访问当前的节点的同时将其右子树节点放入栈中等待访问。先序遍历的代码如
下:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> s;
TreeNode* temp = root;
// 当栈不为空或者root不为空节点时
while(!s.empty() || temp){
//`先遍历、访问、压栈左节点`
while(temp){
s.push(temp);
res.push_back(temp->val);
temp = temp->left;
}
//当访问节点不存在左子树时,退栈对右子树进行访问
temp = s.top();
s.pop();
temp = temp->right;
}
return res;
}
使用一个辅助栈的结构进行访问,访问当前的节点并将其右子树存入栈中,直到节点的左子树不存在时从栈中将节点取出,开始
迭代访问其右子树。