leetcode144. 二叉树的前序遍历(递归+迭代)

一:题目

在这里插入图片描述

二:上码

1:递归

class Solution {
public:
    void preorder(TreeNode* root,vector<int>&v ) {
        if(root == NULL) return;
        v.push_back(root->val);
        preorder(root->left,v);
        preorder(root->right,v);
    }


    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> ans;
        preorder(root,ans);
        return ans;
    }
};

2:迭代遍历

class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        /**
        思路:1.迭代遍历
            2.这里我们用到了栈,其实递归遍历中的递归本质就是栈(操作系统层面上的),我们在递归的时候
              当遇到递归终止条件的时候,是一层一层往回返,那这的话,就是栈的先进后出特性.
            3.迭代遍历,中我们先将根节点入队,然后将其出队将其出队的结点的右节点先入队,然后再将
              左节点入队,(这是为了保证出队的时候我们的顺序是先序的顺序  中左右)
        **/


        vector<int> ans;
        stack<TreeNode*>st;
        if(root != NULL)
        st.push(root);
        
        while(!st.empty()) {
            TreeNode* value = st.top();
            ans.push_back(value->val);
            st.pop();

            if(value->right) st.push(value->right);
            if(value->left) st.push(value->left);
        }

        return ans;
    }
};










在这里插入图片描述
如有疑问请留言!!! 一个人可以走的很快 团结协作才能走的更远!!!!!!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天天向上的菜鸡杰!!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值