因为弄反了行列,所以因为溢出折腾了好一会。做之前感觉递归会更方便,现在还是觉得循环更简单些。
class Solution { public: void printM(vector<vector<int> > matrix,int rowbegin,int rowend,int colbegin,int colend,vector<int>& result){ if(rowbegin>rowend || colbegin>colend) return; int i=colbegin,j=rowbegin; if(rowbegin==rowend){ while(i<=colend) {result.push_back(matrix[i][j]);i++;} return; } else if(colbegin==colend){ while(j<=rowend) {result.push_back(matrix[i][j]);j++;} return; } while(j<rowend) {result.push_back(matrix[i][j]);j++;} while(i<colend) {result.push_back(matrix[i][j]);i++;} while(j>rowbegin) {result.push_back(matrix[i][j]);j--;} while(i>colbegin) {result.push_back(matrix[i][j]);i--;} if(rowbegin<rowend && colbegin<colend) printM(matrix,rowbegin+1,rowend-1,colbegin+1,colend-1,result); return; } vector<int> printMatrix(vector<vector<int> > matrix) { vector<int> result; if(matrix.size()==0) return result; if(matrix[0].size()==0) return result; int rowend=matrix[0].size()-1; int colend=matrix.size()-1; int rowbegin=0,colbegin=0; if(rowbegin<=rowend && colbegin<=colend) printM(matrix,rowbegin,rowend,colbegin,colend,result); return result; } };建立辅助栈,模拟栈的压入弹出过程看是否能全弹出.
class Solution { public: bool IsPopOrder(vector<int> pushV,vector<int> popV) { if(pushV.size()==0 || popV.size()==0) return false; stack<int> stk; int i=0; for(int j=0;j<pushV.size() && i<popV.size();j++){ stk.push(pushV[j]); while(i<popV.size() && !stk.empty() && stk.top()==popV[i]){ stk.pop(); i++; } } if(stk.empty()) return true; return false; } };使用队列,先进先出,按顺序保留每个子节点。
class Solution { public: vector<int> PrintFromTopToBottom(TreeNode* root) { vector<int> print; if(root==NULL) return print; queue<TreeNode*> que; que.push(root); while(!que.empty()){ root=que.front(); que.pop(); if(root==NULL) continue; print.push_back(root->val); que.push(root->left); que.push(root->right); } return print; } };使用一个int值计数,记下一层节点个数countnext,当前节点个数count会在遍历完当前层之后重新赋值为countnext,开始遍历下一层。
class Solution { public: vector<vector<int> > Print(TreeNode* pRoot) { vector<vector<int>> result; vector<int> col; if(pRoot==NULL) return result; queue<TreeNode*> que; que.push(pRoot); int count=1,countnext=0; while(!que.empty()){ pRoot=que.front(); if(pRoot->left!=NULL){ que.push(pRoot->left); countnext++; } if(pRoot->right!=NULL){ que.push(pRoot->right); countnext++; } que.pop(); col.push_back(pRoot->val); count--; if(count==0){ result.push_back(col); col.clear(); count=countnext; countnext=0; } } return result; } };