題目描述
給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。
例如:
給定二叉樹 [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;
}