C++非递归遍历二叉树
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 here vector<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 here vector<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); else continue; } if(p->left != NULL){ p = p->left; treeStack.push(p); } } return listVal; } };
浙公网安备 33010602011771号