102. 二叉樹的層次遍歷-C語言

給定一個二叉樹,返回其按層次遍歷的節點值。 (即逐層地,從左到右訪問所有節點)。

例如:
給定二叉樹: [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7
返回其層次遍歷結果:

[
  [3],
  [9,20],
  [15,7]
]

#define QMAX 1000// 定義太小有些測試用例過不去
typedef struct Queue{
    
    struct TreeNode *Node[QMAX];// 丟列保存樹的節點指針。
    int front;
    int rear;
}Queue;
void Qinit(Queue *q)
{
    q->front = q->rear =0;

}
void push(Queue *q,struct TreeNode *node)
{
    if ((q->rear +1)%QMAX==QMAX){
        q->rear =0;
    }
    q->Node[q->rear] =node;
    q->rear =(q->rear+1)%QMAX;
}
struct TreeNode *pop(Queue *q)
{
    struct TreeNode *node;
    node =q->Node[q->front];
    q->front =(q->front +1)%QMAX;
    return node;
}
int len(Queue q)
{
    if (q.rear  >=q.front)
        return q.rear -q.front;
    return q.rear +QMAX - q.front -1;
}
int** levelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes)
{
    *returnSize =0;
    if (root ==NULL){
        return NULL;
    }
    int i;
    Queue queue;
    Qinit(&queue);//使用封裝的環形隊列。
    int *level =(int *)calloc(1,sizeof(int)*QMAX);//每一層節點的個數。
    push(&queue,root);
    int height=0;
    level[height]=1;
    int **bin_paths =(int **)malloc(sizeof(int *)*QMAX);//1000 level.
    while (len(queue) >0) 
    {   
        height ++; 
        bin_paths[height-1] =(int *)malloc(sizeof(int *) * level[height-1]);//每一層的元素。
        for (i=0;i<level[height-1]; i++)
        {   
            root =pop(&queue);
            bin_paths[height-1][i] =root->val;

            if (root->left !=NULL){
                push(&queue,root->left);
                level[height]++;
            }
            if (root ->right !=NULL){
                push(&queue,root->right);
                level[height]++;
            }
        }
    }
    *returnColumnSizes =level;//每一列的節點數。
    *returnSize =height;//返回層數。
    //遍歷的時候類似於
    //for(i=0;i<returnSize;i++){
    //    for (j=0;j<returnColumnSizes[i];j++){
    //        printf(Order[i][j]);
     //   }
    }

    return bin_paths;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章