107. Binary Tree Level Order Traversal II

本文介绍了一种从叶子节点层到根节点的二叉树层序遍历算法,通过队列实现逐层访问节点并反转结果。适用于理解二叉树遍历的不同方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

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]
]

题目链接:


思路分析

给出一棵二叉树,返回二叉树从叶子节点层到根结点的从左到右的层序遍历。与层序遍历相同,不过在返回之前将层序遍历的结果反转过来即可。

返回的是一个数组的数组,这里使用了队列,首先将根结点入队,然后只要队列中还有元素,不断处理队列中的每一层元素,并将每一层的下一层节点存入队列,存储他们的值并放进最终结果中。然后将最后结果反转,返回即可。

代码
/**
 * 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>> vvi;
        if (!root)
            return vvi;
        queue<TreeNode*> q;
        q.push(root);
        while (!q.empty()){
            vector<int> vi;
            for (int i = 0, n = q.size(); i < n; i++){
                TreeNode* temp = q.front();
                vi.push_back(temp->val);
                q.pop();
                if (temp->left != NULL)
                    q.push(temp->left);
                if (temp->right != NULL)
                    q.push(temp->right);
            }
            vvi.push_back(vi);
        }
        reverse(vvi.begin(), vvi.end());
        return vvi;
    }
};

时间复杂度:O(n) //n为树的结点数


反思

这个题是真的不会,层序遍历的方式还是和其他三种遍历不同的。利用队列的特性来解题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值