leetcode 二叉樹的層次遍歷 II
阿新 • • 發佈:2018-12-13
題目描述:
給定一個二叉樹,返回其節點值自底向上的層次遍歷。 (即按從葉子節點所在層到根節點所在的層,逐層從左向右遍歷)
例如:
給定二叉樹 [3,9,20,null,null,15,7]
,
3 / \ 9 20 / \ 15 7
返回其自底向上的層次遍歷為:
[ [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) { queue<TreeNode *> que; vector<vector<int>> result; vector<int> level; // 暫存當前層 TreeNode *node; int size; que.push(root); // 入隊 while (!que.empty()) { level.clear(); // 清空上一層的暫存,以便下面存放 size = que.size(); for (int i = 0; i < size; i++) { node = que.front(); // 出隊 que.pop(); if (node != NULL) { level.push_back(node->val); // 入隊,從左到右 que.push(node->left); que.push(node->right); } } if (!level.empty()) { result.insert(result.begin(), level); } } return result; } };