按之字形顺序打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。、
解题思路:
使用两个栈来存放从左向右或者从右向左的每层节点,然后使用变量记录层级。
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int> > res; if(pRoot == NULL) return res; res.push_back(vector<int>(1, pRoot->val) ); stack<TreeNode*> stk1; stack<TreeNode*> stk2; stk1.push(pRoot); int cnt = 1; TreeNode * tmp = NULL; while(!stk1.empty() || !stk2.empty()){ if(cnt % 2){ vector<int>levelVct; while(!stk1.empty()){ tmp = stk1.top(); stk1.pop(); if(tmp->right != NULL){ stk2.push(tmp->right); levelVct.push_back(tmp->right->val); } if(tmp->left != NULL){ stk2.push(tmp->left); levelVct.push_back(tmp->left->val); } } if(levelVct.size() != 0) res.push_back(levelVct); }else{ vector<int>levelVct; while(!stk2.empty()){ tmp = stk2.top(); stk2.pop(); if(tmp->left != NULL){ stk1.push(tmp->left); levelVct.push_back(tmp->left->val); } if(tmp->right != NULL){ stk1.push(tmp->right); levelVct.push_back(tmp->right->val); } } if(levelVct.size() != 0) res.push_back(levelVct); } cnt++; } return res; } };
学学学 练练练 刷刷刷