144. 二叉树的前序遍历

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

示例 1:

144. 二叉树的前序遍历_第1张图片

输入:root = [1,null,2,3]
输出:[1,2,3]

示例 2:

输入:root = []
输出:[]

示例 3:

输入:root = [1]
输出:[1]

示例 4:

144. 二叉树的前序遍历_第2张图片

输入:root = [1,2]
输出:[1,2]

示例 5:

144. 二叉树的前序遍历_第3张图片

输入:root = [1,null,2]
输出:[1,2]

 

/**
 * 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 inorder(TreeNode* head,vector&res){
        if(head == nullptr) return ;
        else{
            inorder(head->left,res);
            res.push_back(head->val);
            inorder(head->right,res);   
        }
    }
    vectorinorderTraversal(TreeNode* root) {
        vectorres;
        inorder(root,res);
        return res;
    }
};
/**
 * 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 inorderTraversal(TreeNode* root) {
        vectorres;
        stackst;
        TreeNode* cur = root;
        //左中右。
        //这个并不是遍历地点等于操作地点。
        //得设一个指针到最终位置,再入数组
        while(cur != nullptr || !st.empty()){
            if(cur != nullptr){
                st.push(cur);
                cur = cur->left;
            }
            else{
                cur = st.top();
                st.pop();
                res.push_back(cur->val);
                cur = cur->right;
            }  
        }
        return res;
    }
};

你可能感兴趣的:(leetcode练习,数据结构)