给定一个二叉树,返回其节点值自底向上的层次遍历。 (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历)
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其自底向上的层次遍历为:
[
[15,7],
[9,20],
[3]
]
之前的102题就是层次遍历,所以这个题和那个题思路一模一样,只是放入数组的方式不同或者多了一个逆序的过程而已,上一个题是C++用迭代,然后python用递归,这个题就python用迭代,然后C++用递归来做。
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;
levelorderbottom(root, 0, res);
return vector<vector<int>> (res.rbegin(), res.rend());
}
void levelorderbottom(TreeNode* root, int level, vector<vector<int>> &res)
{
if (root==NULL) return;
if (res.size()==level) res.push_back({});
res[level].push_back(root->val);
if (root->left!=NULL) levelorderbottom(root->left, level+1, res);
if (root->right!=NULL) levelorderbottom(root->right, level+1, res);
}
};
python3源代码:(迭代)
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def levelOrderBottom(self, root):
"""
:type root: TreeNode
:rtype: List[List[int]]
"""
l = []
if root==None:
return l
q = [root]
while len(q)!=0:
n = len(q)
oneLevel = []
for i in range(n):
t = q.pop(0)
oneLevel.append(t.val)
if (t.left!=None):
q.append(t.left)
if (t.right!=None):
q.append(t.right)
l.append(oneLevel)
l.reverse()
return l