/**
* Definition for a binary tree node. // 二叉树节点的定义
* struct TreeNode { // 树节点结构体
* int val; // 节点值
* TreeNode *left; // 左子节点指针
* TreeNode *right; // 右子节点指针
* TreeNode() : val(0), left(nullptr), right(nullptr) {} // 默认构造函数,初始化值为0,左右子节点为空
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} // 构造函数,初始化值为x,左右子节点为空
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} // 构造函数,初始化值为x,左右子节点分别为left和right
* };
*/
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) { // 前序遍历函数
vector<int> result; // 存储结果的
stack<TreeNode*> st; // 辅助栈
if (root == nullptr){ // 如果根节点为空,直接返回结果向量
return result;
}
st.push(root); // 将根节点入栈
while(!st.empty()){ // 当栈不为空时循环执行
TreeNode *tmp = st.top(); // 取栈顶元素
st.pop(); // 出栈
result.push_back(tmp->val); // 将当前节点值加入结果向量
if(tmp->left){ // 如果当前节点的左子节点不为空,将左子节点入栈
st.push(tmp->left);
}
if(tmp->right){ // 如果当前节点的右子节点不为空,将右子节点入栈
st.push(tmp->right);
}
}
return result; // 返回结果
}
};
function preorderTraversal(root):
result = empty list // 创建一个空列表来存储结果
stack = empty stack // 创建一个空栈来辅助遍历
if root is null: // 如果根节点为空
return result // 直接返回空列表作为结果
push root into stack // 将根节点压入栈中
while stack is not empty: // 当栈不为空时循环执行
tmp = top element of stack // 取栈顶元素
pop stack // 弹出栈顶元素
add tmp's value to result // 将当前节点值加入结果列表
if tmp has left child: // 如果当前节点有左子节点
push left child into stack // 将左子节点压入栈中
if tmp has right child: // 如果当前节点有右子节点
push right child into stack // 将右子节点压入栈中
return result // 返回结果列表