题解 | #求二叉树的层序遍历#

求二叉树的层序遍历

https://www.nowcoder.com/practice/04a5560e43e24e9db4595865dc9c63a3

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param root TreeNode类 
 * @return int整型二维数组
 * @return int* returnSize 返回数组行数
 * @return int** returnColumnSizes 返回数组列数
 */
void resort(int* returnSize, int** returnColumnSizes,int** arr,struct TreeNode* queue[])
{
    int start=0,end=1;
    for(int row=0;row<*returnSize;row++){
        int temp=end-start;
        *((*returnColumnSizes)+row)=temp;
        arr[row]=malloc((*returnColumnSizes)[row]*sizeof(int));//这里一定注意,解引用的优先值是最低的
        for(int i=0;i<temp;i++)
        { 
            arr[row][i]=queue[start]->val;
            if(queue[start]->left) 
            queue[end++]=queue[start]->left;
            if(queue[start]->right) 
            queue[end++]=queue[start]->right;
            start++;
        }
    }
}

int finddepth(struct TreeNode* root)
{
    if(!root) return 0;
    int leftdepth=finddepth(root->left);
    int rightdepth=finddepth(root->right);
    return (leftdepth>rightdepth?leftdepth:rightdepth)+1;
}

int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes ) {
    if(!root) return NULL;
    *returnSize=finddepth(root);
    int** arr=malloc(*returnSize*(sizeof(int*)));
    *returnColumnSizes=malloc(*returnSize*sizeof(int));
    struct TreeNode* queue[1500]={root};
    resort(returnSize,returnColumnSizes,arr,queue);
    return arr;
}

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
05-24 12:16
点赞 评论 收藏
转发
投递字节跳动等公司10个岗位
点赞 评论 收藏
转发
点赞 收藏 评论
分享
牛客网
牛客企业服务