學渣帶你刷Leetcode0103二叉樹的鋸齒形層次遍歷

題目描述

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。

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

 
返回鋸齒形層次遍歷如下:

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

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/binary-tree-zigzag-level-order-traversal
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。

白話題目:
 

算法:

 

詳細解釋關注 B站  【C語言全代碼】學渣帶你刷Leetcode 不走丟 https://www.bilibili.com/video/BV1C7411y7gB

C語言完全代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Return an array of arrays of size *returnSize.
 * The sizes of the arrays are returned as *returnColumnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
int** zigzagLevelOrder(struct TreeNode* root, int* returnSize, int** returnColumnSizes){
    * returnSize=0;
    if(root==NULL){
        return NULL;
    }
    *returnColumnSizes=malloc(sizeof(int)*100);
    int **ret=malloc(sizeof(int)*100);
    struct TreeNode**queue=malloc(sizeof(struct TreeNode*)*10000);
    int rear=0,front=0;
    queue[rear++]= root;
    int level=0;
    while(rear!=front){
        int size=rear-front;
        (*returnColumnSizes)[level]=size;
        ret[level]=malloc(sizeof(int)*size);
        int i=0;
        while(size){
            struct TreeNode*node=queue[front++];
            if(level%2==0)
                ret[level][i++]=node->val;
            else 
                ret[level][size-1]=node->val;
            if(node->left)
                queue[rear++]=node->left;
            if(node->right)
                queue[rear++]=node->right;
            size--;
        }
        level++;
    }
    *returnSize=level;
    return ret;
}

 

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