学渣带你刷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;
}

 

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