1. 程式人生 > 實用技巧 >leetcode 42:binary-tree-level-order-traversal-ii

leetcode 42:binary-tree-level-order-traversal-ii

題目描述

給定一個二叉樹,返回該二叉樹由底層到頂層的層序遍歷,(從左向右,從葉子節點到根節點,一層一層的遍歷) 例如: 給定的二叉樹是{3,9,20,#,#,15,7},
    3↵   / ↵  9  20↵    /  ↵   15   7
該二叉樹由底層到頂層層序遍歷的結果是
[↵  [15,7]↵  [9,20],↵  [3],↵]
如果你不清楚“{1,#,2,3}"的含義的話,請繼續閱讀
OJ用這樣的方法將二叉樹序列化: 二叉樹的序列化遵循層序遍歷的原則,”#“代表該位置是一條路徑的終結,下面不再存在結點。 例如:
   1↵  / ↵ 2   3↵    /↵   4↵    ↵     5
上述的二叉樹序列化的結果是:"{1,2,3,#,#,4,#,#,5}". 題目分析: 樹的層序遍歷,常規題。這裡需要處理一下返回值的順序。 程式碼如下:
 1  vector<vector<int> > levelOrderBottom(TreeNode* root) {
 2         vector<vector<int>> vret;
 3         if(root == NULL)
 4             return vret;
 5         stack<vector<int>> ret;
6 queue<TreeNode*> stk; 7 stk.push(root); 8 while(!stk.empty()) 9 { 10 int size = stk.size(); 11 vector<int> tmp; 12 for(int i = 0;i < size;i++) 13 { 14 TreeNode* front = stk.front(); 15 tmp.push_back(front->val);
16 stk.pop(); 17 if(front->left != NULL) 18 stk.push(front->left); 19 if(front->right != NULL) 20 stk.push(front->right); 21 } 22 ret.push(tmp); 23 } 24 while(!ret.empty()) 25 { 26 vret.push_back(ret.top()); 27 ret.pop(); 28 } 29 return vret; 30 }