题目的意思是z字形遍历二叉树,代码有点冗余希望大牛么赐教,大概意思是要不从左到右遍历存入栈中,要不从右至左存入栈中,为了统一操作新建了一个类似头节点的树节点。
/** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: vector<vector<int> > zigzagLevelOrder(TreeNode *root) { // Start typing your C/C++ solution below // DO NOT write int main() function bool flag = true; vector<vector<int> > result; if(root==NULL) return result; vector<TreeNode*> stack; vector<TreeNode*> temp; vector<int> layer; TreeNode *head = (TreeNode*)malloc(sizeof(TreeNode)); head->left = root; head->right = NULL; stack.push_back(head); while(!stack.empty()) { temp.clear(); layer.clear(); if(flag) { for(vector<TreeNode*>::iterator iter = stack.end()-1;iter>=stack.begin();iter--) { if((*iter)->left!=NULL) { temp.push_back((*iter)->left); layer.push_back((*iter)->left->val); } if((*iter)->right!=NULL) { temp.push_back((*iter)->right); layer.push_back((*iter)->right->val); } } } else { for(vector<TreeNode*>::iterator iter = stack.end()-1;iter>=stack.begin();iter--) { if((*iter)->right!=NULL) { temp.push_back((*iter)->right); layer.push_back((*iter)->right->val); } if((*iter)->left!=NULL) { temp.push_back((*iter)->left); layer.push_back((*iter)->left->val); } } } stack = temp; if(!layer.empty()) result.push_back(layer); flag = !flag; } free(head); head =NULL; return result; } };