C语言版本:先序遍历:先根节点,在左子树,在右子树

 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型一维数组
 * @return int* returnSize 返回数组行数
 */
    static int num;//定义一个全局static的变量,注意最后输出要给returnsize返回下标才能显示;
void preorder(struct TreeNode* root,int* res){

    if(root==NULL){
        return;
    }
    res[num++]=root->val;
    preorder(root->left, res);//不断递归,同时把左子树的根节点放入数组当中
    preorder(root->right, res);
    
}

int* preorderTraversal(struct TreeNode* root, int* returnSize ) {
    // write code here
    int *ret=(int *)malloc(sizeof(int)*100);
    
    preorder(root, ret);
    *returnSize=num;
    return ret;
}

C++版本:vector是一个数组容器,push_back这个方法,是往容器里面添加数据,(从这就可以看出来了C++比C的快乐)

public:
    vector<int> res;
    void dfs(TreeNode* Node){
        if(Node == nullptr) return;
        res.push_back(Node->val);
        dfs(Node->left);
        dfs(Node->right);
    }
    vector<int> preorderTraversal(TreeNode* root) {
        // write code here
        dfs(root);
        return res;
    }
};