标签:node nullptr st leecode push stk root 刷题
树的前中后序非递归算法
先序遍历-1
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack <TreeNode*> st;
TreeNode* node=root;
while(!st.empty()||node!=nullptr){
while(node!=nullptr){
st.push(node);
result.push_back(node->val);
node=node->left;
}
if(!st.empty()){
node=st.top();
st.pop();
node=node->right;
}
}
return result;
}
};
先序遍历-2
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack <TreeNode*> st;
TreeNode* node=root;
unordered_set<TreeNode*> vis;
if(root==nullptr){
return result;
}
st.push(root);
while(!st.empty()){
node=st.top();
if(vis.count(node)){
st.pop();
}
else{
vis.insert(node);
result.push_back(node->val);
if(node->right){
st.push(node->right);
}
if(node->left){
st.push(node->left);
}
}
}
return result;
}
};
##中序遍历-1
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> stk;
while (root != nullptr || !stk.empty()) {
while (root != nullptr) {
stk.push(root);
root = root->left;
}
root = stk.top();
stk.pop();
res.push_back(root->val);
root = root->right;
}
return res;
}
};
后序遍历——1
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root) {
vector<int> res;
if (root == nullptr) {
return res;
}
stack<TreeNode *> stk;
TreeNode *prev = nullptr;
while (root != nullptr || !stk.empty()) {
while (root != nullptr) {
stk.emplace(root);
root = root->left;
}
root = stk.top();
stk.pop();
if (root->right == nullptr || root->right == prev) {
res.emplace_back(root->val);
prev = root;
root = nullptr;
} else {
stk.emplace(root);
root = root->right;
}
}
return res;
}
};
层次遍历
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector <vector <int>> ret;
if (!root) {
return ret;
}
queue <TreeNode*> q;
q.push(root);
while (!q.empty()) {
int currentLevelSize = q.size();
ret.push_back(vector <int> ());
for (int i = 1; i <= currentLevelSize; ++i) {
auto node = q.front(); q.pop();
ret.back().push_back(node->val);
if (node->left) q.push(node->left);
if (node->right) q.push(node->right);
}
}
return ret;
}
};
标签:node,nullptr,st,leecode,push,stk,root,刷题 来源: https://blog.csdn.net/m0_55757535/article/details/123594137
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。