二叉树相关|单值二叉树|相同的树|对称二叉树|前序遍历|中序遍历|后序遍历|另一棵树的子树|二叉树遍历(C)-144. 二叉树的前序遍历

时间:2024-11-07 17:31:40

前序遍历二叉树,把前序遍历的结果存到一个数组里面

遍历的时候需要定义一个数组的下标来存数据,因为每次递推,每个函数栈帧都会有一个i,形参不会影响实参,所以i会出现问题
所以定义一个局部变量,通过传地址来解决这个问题
不能用静态变量,否则每次调用函数都需要把下标置空

int TreeSize(struct TreeNode* root)
{
    return root == NULL ? 0 : TreeSize(root->left) + TreeSize(root->right) + 1;
}

void preorder(struct TreeNode* root, int* a, int* pi)
{
    if (root == NULL)
        return;
  
    a[(*pi)++] = root->val;
    preorder(root->left, a, pi);
    preorder(root->right, a, pi);
}
  
int* preorderTraversal(struct TreeNode* root, int* returnSize) {
    int n = TreeSize(root);
    int* a = (int*)malloc(sizeof(int)*n);
  
    int i = 0;
    preorder(root, a, &i);
  
    *returnSize = n;
    return a;
}

这里需要返回数组的大小,通过返回二叉树的节点个数来实现