地址 https://www.acwing.com/problem/content/description/43/node
題目描述
請實現一個函數按照之字形順序從上向下打印二叉樹。算法
即第一行按照從左到右的順序打印,第二層按照從右到左的順序打印,第三行再按照從左到右的順序打印,其餘行以此類推。函數
樣例spa
輸入以下圖所示二叉樹[8, 12, 2, null, null, 6, 4, null, null, null, null] 8 / \ 12 2 / \ 6 4 輸出:[[8], [2, 12], [6, 4]]
算法1
在上一題的基礎上 加上了一個左右打印標誌 若是標誌爲真 則逆向一下輸入的vectorcode
C++ 代碼blog
/** * 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>> res; queue<TreeNode*> que; int leftToright = 1; void bfs() { while(!que.empty()){ vector<int> lineVec; while(!que.empty() && NULL != que.front() ){ TreeNode* p = que.front(); que.pop(); lineVec.push_back(p->val); if(p->left!=NULL) que.push(p->left); if(p->right!=NULL) que.push(p->right); } if(leftToright == 1){ reverse(lineVec.begin(),lineVec.end()); } res.push_back(lineVec); leftToright = !leftToright; if(!que.empty()){ que.pop(); } if(!que.empty()){ que.push(NULL); } } } vector<vector<int>> printFromTopToBottom(TreeNode* root) { if(root == NULL) return res; que.push(root); que.push(NULL); leftToright = !leftToright; bfs(); return res; } }; 做者:defddr 連接:https://www.acwing.com/solution/acwing/content/3662/ 來源:AcWing 著做權歸做者全部。商業轉載請聯繫做者得到受權,非商業轉載請註明出處。