Leetcode 107. Binary Tree Level Order Traversal II

Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from left to right, level by level from leaf to root).

For example:
Given binary tree [3,9,20,null,null,15,7],
    3
   / \
  9  20
    /  \
   15   7
return its bottom-up level order traversal as:
[
  [15,7],
  [9,20],
  [3]
]

可以直接使用該題的代碼:http://www.lxweimin.com/p/e12727485829,然后將結果的數組反轉即可。
反轉數組比較慢,可以先得到數的高度,然后在遞歸處理的時候由數的層數,就可以知道應該放在數組哪個位置了。

/**
 * 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 *columnSizes array.
 * Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().
 */
void level(struct TreeNode* root, int** columnSizes, int* returnSize,int** ans,int height)
{
    if(height>*returnSize)
    {
        *returnSize=*returnSize+1;
        ans[height-1]=(int *)malloc(sizeof(int)*100000);
        (*columnSizes)[height-1]=0;
    }
    if(root==NULL)return;
    ans[height-1][(*columnSizes)[height-1]]=root->val;
    //printf("%d: %d %d\n",height-1,(*columnSizes)[height-1],ans[height-1][(*columnSizes)[height-1]]);
    (*columnSizes)[height-1]=(*columnSizes)[height-1]+1;
    
    
    if(root->left!=NULL)
        level(root->left,columnSizes,returnSize,ans,height+1);
    if(root->right!=NULL)
        level(root->right,columnSizes,returnSize,ans,height+1);
    return;
}
int** levelOrderBottom(struct TreeNode* root, int** columnSizes, int* returnSize) {
    int **ans=(int**)malloc(sizeof(int*)*1000);
    *returnSize=0;
    *columnSizes=(int *)malloc(sizeof(int)*1000);
    if(root==NULL)return ans;
    level(root,columnSizes,returnSize,ans,1);
    for(int i=0;i<(*returnSize)/2;i++)
    {
        int temp;
        if((*columnSizes)[i] > (*columnSizes)[(*returnSize)-1-i])
        {
            for(int j=0;j<(*columnSizes)[i];j++)
            {
                temp=ans[i][j];
                ans[i][j]=ans[(*returnSize)-1-i][j];
                ans[(*returnSize)-1-i][j]=temp;
                
            }
        }
        else
        {
            printf("3\n");
            for(int j=0;j<(*columnSizes)[(*returnSize)-1-i];j++)
            {
                temp=ans[i][j];
                ans[i][j]=ans[(*returnSize)-1-i][j];
                ans[(*returnSize)-1-i][j]=temp;
            }
        }
        temp=(*columnSizes)[i];
        (*columnSizes)[i]=(*columnSizes)[(*returnSize)-1-i];
        (*columnSizes)[(*returnSize)-1-i]=temp;
    }
    return ans;
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容