二叉树的遍历是面试中经常考察的,其实前中后三种顺序的遍历都大同小异,自己模拟两个栈用笔画画我相信是不难写出代码的。现罗列如下,均是自己所写已通过leetcode。
1 class Solution { 2 public: 3 vector preorderTraversal(TreeNode *root) { 4 vector out; 5 stacks; 6 s.push(root); 7 while(!s.empty() && root){ 8 TreeNode *node = s.top(); 9 out.push_back(node->val);10 s.pop();11 if(node->right) s.push(node->right);12 if(node->left) s.push(node->left);13 }14 return out;15 16 17 }18 vector inorderTraversal(TreeNode *root) {19 stack s;20 vector out;21 TreeNode *node = root;22 bool done = false;23 while(!done){24 if(node){25 s.push(node);26 node = node->left;27 }else {28 if(s.empty()) done = true;29 else{30 node = s.top();31 s.pop();32 out.push_back(node->val);33 node = node->right;34 }35 }36 }37 return out;38 }39 vector postorderTraversal(TreeNode *root) {40 vector out;41 stack s;42 TreeNode* node = root;43 s.push(node);44 while(!s.empty()&&node){45 node = s.top();46 out.push_back(node->val);47 s.pop();48 if(node->left) s.push(node->left);49 if(node->right)s.push(node->right);50 }51 reverse(out.begin(),out.end());52 return out;53 }54 };