0
点赞
收藏
分享

微信扫一扫

144. 二叉树的前序遍历(二叉树)(Leetcode刷题笔记)

144. 二叉树的前序遍历(二叉树)(Leetcode刷题笔记)

https://lunan0320.cn

文章目录

题目

给你二叉树的根节点 root ,返回它节点值的 前序 遍历。

解题代码 C++ (递归)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    //前序遍历
    void traversal(TreeNode* root, vector<int>& res){
        
        //终止条件
        if(!root) return;
        //中 左 右
        res.push_back(root->val);
        traversal(root->left, res);
        traversal(root->right, res);
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int>res;
        //遍历过程
        traversal(root,res);
        return res;
    }
};

解题代码 C++(迭代法)

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    vector<int> preorderTraversal(TreeNode* root) {
        stack<TreeNode*> st;
        vector<int> res;
        //先判断首元素
        if(!root) return res;
        //根结点不为空,就入栈
        st.push(root);
        //不断的循环,直到栈为空
        while(!st.empty()){
            //取出栈顶元素
            TreeNode* tmp = st.top();
            st.pop();
            //栈顶元素入vector
            res.push_back(tmp->val);
            //对于不为空的左右结点也入栈(注意顺序:先右后左才符合栈弹出的情况)
            if(tmp->right) st.push(tmp->right);
            if(tmp->left) st.push(tmp->left);
        }
        return res;
    }
};

算法效率

举报

相关推荐

0 条评论