树的前中后序非递归算法
先序遍历-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;
}
};
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。