LeetCode 题解(222) : Binary Tree Level Order Traversal II

来源:互联网 发布:泰州学院教务网络系统 编辑:程序博客网 时间:2024/05/18 02:48

题目:

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]]
题解:

按正常顺序遍历完后reverse结果。

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>> results;        if(root == NULL)            return results;                    queue<TreeNode*> q1, q2;        q1.push(root);        while(q1.size() != 0) {            vector<int> result;            while(q1.size() != 0) {                TreeNode* cur = q1.front();                q1.pop();                result.push_back(cur->val);                if(cur->left != NULL)                    q2.push(cur->left);                if(cur->right != NULL)                    q2.push(cur->right);            }            results.push_back(result);            q1 = q2;            queue<TreeNode*> empty;            swap(q2, empty);        }        reverse(results.begin(), results.end());        return results;    }};

Java版:

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */import java.util.Collections;public class Solution {    public List<List<Integer>> levelOrderBottom(TreeNode root) {        List<List<Integer>> results = new LinkedList<List<Integer>>();        if(root == null)            return results;                    Queue<TreeNode> q1 = new LinkedList<>();        Queue<TreeNode> q2 = new LinkedList<>();        q1.add(root);        while(q1.size() != 0) {            List<Integer> result = new ArrayList<>();            while(q1.size() != 0) {                TreeNode cur = q1.poll();                result.add(cur.val);                if(cur.left != null)                    q2.add(cur.left);                if(cur.right != null)                    q2.add(cur.right);            }            results.add(result);            q1.addAll(q2);            q2.clear();        }        Collections.reverse(results);        return results;    }}

Python版:

# Definition for a binary tree node.# class TreeNode(object):#     def __init__(self, x):#         self.val = x#         self.left = None#         self.right = Noneimport copyclass Solution(object):    def levelOrderBottom(self, root):        """        :type root: TreeNode        :rtype: List[List[int]]        """        if root == None:            return []                    results = []        #s = [[root.val]]        q1 = []        q2 = []        q1.append(root)        while len(q1) != 0:            temp = []            for i in q1:                temp.append(i.val)                if i.left != None:                    q2.append(i.left)                if i.right != None:                    q2.append(i.right)            results.append(temp)            q1 = copy.copy(q2)            q2 = []        results.reverse()                return results

0 0