C++非递归前序遍历
/*** struct TreeNode {* int val;* struct TreeNode *left;\images\20211111\392807_1636599059575\FE67E09E9BA5661A7AB9DF9638FB1FAC* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/ class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @return int整型vector*/vector<int> preorderTraversal(TreeNode* root) {// write code herevector<int> listVal;stack<TreeNode*> treeStack;if(root == NULL) return listVal;treeStack.push(root);while(!treeStack.empty()){TreeNode *p = treeStack.top();treeStack.pop();listVal.push_back(p->val);cout<<p->val<<endl;//因为入栈的原因所以要右孩子先出战if(p->right != NULL){treeStack.push(p->right);}if(p->left != NULL){treeStack.push(p->left);} }return listVal;} };
C++非递归中序遍历
/*** struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}* };*/ class Solution {public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param root TreeNode类* @return int整型vector*/vector<int> inorderTraversal(TreeNode* root) {// write code herevector<int> listVal;stack<TreeNode*> treeStack;if(root == NULL) return listVal;treeStack.push(root);TreeNode *p = root;while(!treeStack.empty()){if(p->left == NULL){p = treeStack.top();//cout<<p->val<<endl;listVal.push_back(p->val);treeStack.pop();p = p->right;
//当右孩子为NULL寻找上一级的右孩子while(!treeStack.empty() && p == NULL){p = treeStack.top();//cout<<p->val<<endl;listVal.push_back(p->val);treeStack.pop();p = p->right;}if(p != NULL)treeStack.push(p);elsecontinue;}if(p->left != NULL){p = p->left;treeStack.push(p);} }return listVal;} };