请问下面这个有没有人会,帮我回答一下

img


请问下面这个有没有人会做的,帮我回答一下


/**
 * struct TreeNode {
 *    int val;
 *    struct TreeNode *left;
 *    struct TreeNode *right;
 * };
 */

class Solution {
public:
    vector<int> result;
    /**
     * 
     * @param root TreeNode类 
     * @return int整型vector
     */
    vector<int> preorderTraversal(TreeNode* root) {
        // write code here
        if(root == NULL)
            return result;
        stack<TreeNode*> s;
        s.push(root);
        while(!s.empty())
        {
            TreeNode* node = s.top();
            s.pop();
            result.push_back(node->val);
            if(node->right)
                s.push(node->right);
            if(node->left)
                s.push(node->left);
        }
        return result;
    }
};

这个是比较经典的递归问题,可以看下代码,如果这个代码看不懂,可以私聊我,我拉你进来打卡学习

void preorder(struct TreeNode* root, int *ret, int *returnSize) {
    if(root) {
        ret[ (*returnSize) ++ ] = root->val;              // (1) 先访问根结点;
        preorder(root->left, ret, returnSize);            // (2) 再前序遍历左子树;
        preorder(root->right, ret, returnSize);           // (3) 最后前序遍历右子树;
    }
} 

int* preorderTraversal(struct TreeNode* root, int* returnSize){
    int *ret = (int *) malloc( sizeof(int) * 105 );       // (4) 数组内存申请的时候比最大个数多一点无妨;
    *returnSize = 0;                                      // (5) 数组长度置0;
    preorder(root, ret, returnSize);                      // (6) 开始前序遍历,并且记录结果到```ret```中;
    return ret;
}