前序遍历
题目链接
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> res;
preorder(root, res);
return res;
}
void preorder(TreeNode *node, vector<int> &res){
if(node){
res.push_back(node->val);
if(node->left)
preorder(node->left, res);
if(node->right)
preorder(node->right, res);
}
}
};
前序递归
题目链接
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
if(root == nullptr)
return {};
stack<TreeNode*> st;
st.push(root);
TreeNode *cur;
vector<int> res;
while(!st.empty()){
cur = st.top();
res.push_back(cur->val);
st.pop();
if(cur->right)
st.push(cur->right);
if(cur->left)
st.push(cur->left);
}
return res;
}
};
统一迭代(中序)
题目链接
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root) {
vector<int> res;
stack<TreeNode*> st;
TreeNode* node;
if(root)
st.push(root);
while(!st.empty()){
node = st.top();
if(node){
st.pop();
if(node->right)
st.push(node->right);
st.push(node);
st.push(NULL);//标记访问过的node
if(node->left)
st.push(node->left);
}
else{
st.pop();
node = st.top(); //访问过的node
st.pop();
res.push_back(node->val);
}
}
return res;
}
};
层序遍历
题目链接
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
deque<TreeNode*> deq;
if(root) deq.push_back(root);
vector<vector<int>> res;
while(!deq.empty()){
int len = deq.size();
vector<int> layer;
while(len--){
TreeNode *node = deq.front();
layer.push_back(node->val);
deq.pop_front();
if(node->left)
deq.push_back(node->left);
if(node->right)
deq.push_back(node->right);
}
res.push_back(layer);
}
return res;
}
};