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,#,#,15,7},

    3

   / \

  9  20

    /  \

   15   7

return its bottom-up level order traversal as:

[

  [15,7],

  [9,20],

  [3]

]

C++:
/**

 * Definition for a binary tree node.

 * struct TreeNode {

 *     int val;

 *     TreeNode *left;

 *     TreeNode *right;

 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}

 * };

 */

class Solution {

public:

    vector<vector<int>> levelOrderBottom(TreeNode* root) {

        

        vector<vector<int>> res;

        if(!root) return res; //防止为空

        

        traverse(root,1,res);

        std:reverse(res.begin(),res.end());

        return res;

    }

    

    //通过递归的手段解决

    void traverse(TreeNode* root,size_t level,vector<vector<int>> & res)

    {

        if(!root) return;

        

        if(level>res.size())

        {

            res.push_back(vector<int>());

        }

        res[level-1].push_back(root->val);

        

        //处理下一层节点的数据,不断向下延伸

        traverse(root->left ,level+1,res);

        traverse(root->right,level+1,res);

    }

};

此题可以理解为二叉树翻转记录吗?

使用递归手段解决,一层层节点往下展开;调用stl去进行排序。

此题可以改进,即每层的数据进行逆序,但是这个也较好解决。

 

此题请问谁有C语言解法,求指导!

 

你可能感兴趣的:(binary)