面試題61:按之字形順序列印二叉樹
阿新 • • 發佈:2019-02-11
題目:請實現一個函式按照之字形列印二叉樹,即第一行按照從左到右的順序列印,第二層按照從右至左的順序列印,第三行按照從左到右的順序列印,其他行以此類推。
其實這題和之前的60題其實差不多,完全可以獲得的正序的部分再逆序,但書上介紹了另一種方法,就按書上的寫了。
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<int> vect; vector<vector<int> > v; if(pRoot == NULL) return v; stack<TreeNode*> s1; stack<TreeNode*> s2; s1.push(pRoot); TreeNode *temp=NULL; while(!s1.empty() || !s2.empty()) { while(!s1.empty()) { temp = s1.top(); s1.pop(); if(temp->left) s2.push(temp->left); if(temp->right) s2.push(temp->right); vect.push_back(temp->val); } v.push_back(vect); vect.resize(0); while(!s2.empty()) { temp = s2.top(); s2.pop(); if(temp->right) s1.push(temp->right); if(temp->left) s1.push(temp->left); vect.push_back(temp->val); } if(vect.size() != 0) v.push_back(vect); vect.resize(0); } return v; } };