107

定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)

例如:

给定二叉树 [3,9,20,null,null,15,7],

    3

  / \

  9  20

    /  \

  15  7

返回其自底向上的层次遍历为:

[

  [15,7],

  [9,20],

  [3]

]

思路:还是按照层次遍历的思路,只不过它返回的是二维数组,把一层放入队列后,输出一层,并递归调用,层层实现。

vector> levelOrderBottom(TreeNode* root) {

        vector> v;

        queue que;

        if(root != NULL)

            que.push(root);

        level(que,v);

        return v;

    }

    void level(queue que,vector>& v)

    {

        if(que.empty())

            return;

        vector ve;

        queue q;

        while(!que.empty())

        {

            TreeNode* p = que.front();

            que.pop();

            ve.push_back(p->val);

            if(p->left != NULL)

                q.push(p->left);

            if(p->right != NULL)

                q.push(p->right);

        }

        level(q,v);

        v.push_back(ve);

    }

你可能感兴趣的:(107)