OJ:二叉树的前序遍历 | C

题目链接:144. 二叉树的前序遍历 - 力扣(LeetCode)

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

示例:
OJ:二叉树的前序遍历 | C_第1张图片

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

思路

OJ:二叉树的前序遍历 | C_第2张图片
关于以上两个子函数,详见→二叉树的实现

解:

void PreOrder(struct TreeNode* root, int* array, int* pi)
{
    if (!root)
        return;

    //根
    array[*pi] = root->val;
    ++(*pi);
    //左子树
    PreOrder(root->left, array, pi);
    //右子树
    PreOrder(root->right, array, pi);

}
int TreeNodeSize(struct TreeNode* root)
{
    if (!root)
        return 0;

    if ((root->left == NULL) && (root->right) == NULL)
        return 1;

    return 1 + TreeNodeSize(root->left) + TreeNodeSize(root->right);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) 
{
    *returnSize = TreeNodeSize(root);
    int i = 0;
    int* array = (int*)malloc(sizeof(int) * (*returnSize));
    PreOrder(root, array, &i);
    return array;
}

你可能感兴趣的:(题,数据结构初阶,c语言,算法,leetcode)