二叉树3中遍历方法的迭代实现

来源:互联网 发布:淘宝账号怎么升级心 编辑:程序博客网 时间:2024/06/14 00:58
struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};vector<int> preorderTraversal(TreeNode *root){vector<int> result;if (root == nullptr)return result;stack<TreeNode*> s;s.push(root);while (!s.empty()){TreeNode* cur = s.top();s.pop();result.push_back(cur->val);if (cur->right)s.push(cur->right);if (cur->left)s.push(cur->left);}return result;}vector<int> InOrderWithoutRecursion1(TreeNode* root){vector<int> result;if (root == NULL)return result; TreeNode* p = root;stack<TreeNode*> s;while (!s.empty() || p){ while (p){s.push(p);p = p->left;}//当p为空时,说明已经到达左子树最下边,这时需要出栈了  if (!s.empty()){p = s.top();s.pop();result.push_back(p->val);p = p->right;}}}vector<int> postorderTraversal(TreeNode *root){vector<int> result;if (root == nullptr)return result;stack<TreeNode*> s;TreeNode* pre = nullptr;s.push(root);while (!s.empty()){TreeNode* cur = s.top();if ((cur->left == nullptr && cur->right == nullptr) ||(pre != nullptr && (pre == cur->left || pre == cur->right))){result.push_back(cur->val);s.pop();pre = cur;}else{if (cur->right)s.push(cur->right);if (cur->left)s.push(cur->left);}}return result;}

原创粉丝点击