leecode刷题-1
作者:互联网
树的前中后序非递归算法
先序遍历-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