一、前序遍历(迭代法)->右左中
前序遍历是中左右,每次先处理的是中间节点,那么先将根节点放入栈中,然后将右孩子加入栈,再加入左孩子。
为什么要先加入 右孩子,再加入左孩子呢?因为这样出栈的时候才是中左右的顺序。
注:前序遍历要访问的元素和要处理的元素顺序是一致的,都是中间节点
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
if(root!=nullptr) st.push(root);//将被访问的结点放入栈中
while(!st.empty()) //此时栈内不为空
{
TreeNode *node=st.top();//标记栈顶元素(此时是被访问型元素)
if(node!=nullptr)//若栈顶元素不为空
{
st.pop();//弹出栈顶元素
if(node->right!=nullptr) st.push(node->right);//添加右结点(空节点不入栈)
if(node->left!=nullptr) st.push(node->left)