LintCode 二叉树的遍历 (非递归)

前序:

class Solution {public:/*** @param root: The root of binary tree.* @return: Preorder in vector which contains node values.*/vector<int> preorderTraversal(TreeNode *root) {// write your code herestack<TreeNode*> s;vector<int> res;while (root!= nullptr || !s.empty()) {while (root != nullptr) {res.push_back(root->val);s.push(root);root = root->left;}if (!s.empty()) {root = s.top();s.pop();root = root->right;}}return res;}};中序:

class Solution {/*** @param root: The root of binary tree.* @return: Inorder in vector which contains node values.*/public:vector<int> inorderTraversal(TreeNode *root) {// write your code herestack<TreeNode *> s;vector<int> res;while (root!=nullptr || !s.empty()) {while (root != nullptr){s.push(root);root = root->left;}if (!s.empty()) {root = s.top();res.push_back(root->val);s.pop();root = root ->right;}}return res;}};

后续:

/** * Definition of TreeNode: * class TreeNode { * public: *int val; *TreeNode *left, *right; *TreeNode(int val) { *this->val = val; *this->left = this->right = NULL; *} * } */class Solution {/*** @param root: The root of binary tree.* @return: Postorder in vector which contains node values.*/public:vector<int> postorderTraversal(TreeNode *root) {// write your code herevector<int> res;stack<TreeNode*> s;TreeNode * cur;TreeNode *pre = nullptr;if (root == nullptr) {return res;}s.push(root);while (!s.empty()) {cur = s.top();if ((cur->left == nullptr && cur->right == nullptr) || (pre != nullptr && (pre==cur->left || pre == cur->right))) {res.push_back(cur->val);s.pop();pre = cur;}else {if (cur->right != nullptr) {s.push(cur->right);}if (cur->left != nullptr) {s.push(cur->left);}}}return res;}};

版权声明:本文为博主原创文章,未经博主允许不得转载。

,带上心灵去旅行,以平和的心态看待一切,

LintCode 二叉树的遍历 (非递归)

相关文章:

你感兴趣的文章:

标签云: