1. 程式人生 > 其它 >JZ59-按之字形順序列印二叉樹

JZ59-按之字形順序列印二叉樹

技術標籤:劍指offer二叉樹演算法佇列c++之字形

【題目描述】

請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。

示例

輸入輸出
{8,6,10,5,7,9,11}[[8],[10,6],[5,7,9,11]]

【佇列】

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { //建立返回引數型別 vector<vector<int>> ret; if (!pRoot) return ret;//判空操作 //*******************************************// // 注意,此處本想用vector<TreeNode*>q代替 //但是極其不方便 //vector<int> c.
//c.clear() 移除容器中所有資料。 //c.empty() 判斷容器是否為空。 //c.erase(pos) 刪除pos位置的資料 //c.erase(beg,end) 刪除[beg,end)區間的資料 //c.front() 傳回第一個資料。 // c.insert(pos,elem) 在pos位置插入一個elem拷貝 //c.pop_back() 刪除最後一個數據。
// c.push_back(elem) 在尾部加入一個數據。 // c.resize(num) 重新設定該容器的大小 // c.size() 回容器中實際資料的個數。 //c.begin() 返回指向容器第一個元素的迭代器 // c.end() 返回指向容器最後一個元素的迭代器 //沒有pop 刪去頭部的指令,earse刪除操作後,需將後面的資料手動補位。。。 //*******************************************************************// queue<TreeNode*> q; q.push(pRoot); int level = 0; while (!q.empty()) { int sz = q.size();//push幾次,size就是幾 vector<int> ans; while (sz--) { TreeNode *node = q.front(); q.pop(); ans.push_back(node->val); if (node->left) q.push(node->left); if (node->right) q.push(node->right); } ++level; //************************************// // 此程式碼的精髓 // //***********************************// if (!(level&1)) // 偶數層 反轉一下 reverse(ans.begin(), ans.end()); ret.push_back(ans); } return ret; } };