程序员面试金典--按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
使用 bfs 和 depth 相结合。
/* 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> > ans; if(pRoot == NULL) { return ans; } TreeNode *pt = pRoot, *cur_s; queue<TreeNode*> stk; queue<int> skd; stk.push( pt ); skd.push( 1 ); int cur_tmp, depth = 1; vector<int> tmp; while(!stk.empty()){ cur_s = stk.front(); stk.pop(); cur_tmp = skd.front(); skd.pop(); if(cur_tmp != depth){ if(depth%2 == 0){ reverse(tmp.begin(), tmp.end()); } ans.push_back(tmp); tmp.clear(); depth = cur_tmp; } tmp.push_back( cur_s->val ); if( cur_s->left ){ stk.push( cur_s->left ); skd.push( cur_tmp + 1 ); } if( cur_s->right ){ stk.push( cur_s->right ); skd.push( cur_tmp + 1 ); } } if(tmp.size() > 0){ if(depth%2 == 0){ reverse(tmp.begin(), tmp.end()); } ans.push_back( tmp ); } return ans; } };