【手撕】中序遍歷二叉樹
阿新 • • 發佈:2020-12-27
#include<iostream> #include<vector> #include<stack> using namespace std; struct TreeNode // 定義樹節點的結構 { int val; TreeNode* left; TreeNode* right; TreeNode(int x) : val(x), left(nullptr), right(nullptr) {} }; /* class Solution // 中序遍歷二叉樹,迭代解法 { public: vector<int> result; vector<int> preorderTraversal(TreeNode* root) // 中序遍歷二叉樹,返回的是陣列 { if (root == nullptr) { return {}; } preorderTraversal(root->left); result.push_back(root->val); preorderTraversal(root->right); return result; } };*/ class Solution //遞迴解法 { public: vector<int> preorderTraversal(TreeNode* root) { stack<TreeNode*> sta; vector<int> result; if (root == nullptr) { return {}; } TreeNode* cur = root; while (cur != nullptr || !sta.empty()) {if (cur != nullptr) { sta.push(cur); cur = cur->left; } else { cur = sta.top(); sta.pop(); result.push_back(cur->val); cur = cur->right; } }return result; } }; int main() { TreeNode* node1 = new TreeNode(1); TreeNode* node2 = new TreeNode(2); TreeNode* node3 = new TreeNode(3); node1->right = node2; node2->left = node3; TreeNode* root = node1; vector<int> res; Solution solution; res = solution.preorderTraversal(root); vector<int>::iterator iter = res.begin(); while (iter != res.end()) { cout << *iter << endl; iter++; } return 0; }