144.二叉树的前序遍历
递归遍历代码如下:
class Solution {
public:
void preOrder(TreeNode *root, vector<int> &vec){
if(root == NULL) return;
vec.push_back(root->val);
preOrder(root->left, vec);
preOrder(root->right, vec);
}
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
preOrder(root, result);
return result;
}
};
迭代遍历代码如下:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> myStack;
if(root == NULL) return result;
myStack.push(root);
while(!myStack.empty()){
TreeNode* root = myStack.top();
myStack.pop();
result.push_back(root->val);
if(root->right) myStack.push(root->right);
if(root->left) myStack.push(root->left);
}
return result;
}
};
统一迭代遍历:
代码如下:
class Solution {
public:
vector<int> preorderTraversal(TreeNode* root) {
vector<int> result;
stack<TreeNode*> st;
if(root != NULL) st.push(root);;
while(!st.empty()){
TreeNode* node = st.top();
if(node != NULL){
st.pop();
if(node->right) st.push(node->right);
if(node->left) st.push(node->left);
st.push(node);
st.push(NULL);
}
else{
st.pop();
node = st.top();
st.pop();
result.push_back(node->val);
}
}
return result;
}
};
145.二叉树的后序遍历
递归遍历代码如下:
class Solution {
public:
void postOrder(TreeNode* root, vector<int> &vec){
if(root == NULL) return;
postOrder(root->left, vec);
postOrder(root->right, vec);
vec.push_back(root->val);
}
vector<int> postorderTraversal(TreeNode* root) {
vector<int> result;
postOrder(root, result);
return result;
}
};
迭代遍历代码如下:
想不到,抄得很爽
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root){
vector<int> result;
stack<TreeNode*> st;
if(root == NULL) return result;
st.push(root);
while(!st.empty()){
root = st.top();
st.pop();
result.push_back(root->val);
if(root->left) st.push(root->left);
if(root->right) st.push(root->right);
}
reverse(result.begin(), result.end());
return result;
}
};
统一迭代遍历:
似懂非懂,抄得很爽,代码如下:
class Solution {
public:
vector<int> postorderTraversal(TreeNode *root){
vector<int> result;
stack<TreeNode*> st;
if(root != NULL) st.push(root);;
while(!st.empty()){
TreeNode* node = st.top();
if(node != NULL){
st.pop();
st.push(node);
st.push(NULL);
if(node->right) st.push(node->right);
if(node->left) st.push(node->left);
}
else{
st.pop();
node = st.top();
st.pop();
result.push_back(node->val);
}
}
return result;
}
};
94.二叉树的中序遍历
递归遍历代码如下:
class Solution {
public:
void inOrder(TreeNode *root, vector<int>& vec){
if(root == NULL) return;
inOrder(root->left, vec);
vec.push_back(root->val);
inOrder(root->right, vec);
}
vector<int> inorderTraversal(TreeNode* root) {
vector<int> result;
inOrder(root, result);
return result;
}
};
迭代遍历代码如下:
想不出,抄得很爽。。
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root){
vector<int> result;
stack<TreeNode*> st;
TreeNode* cur = root;
while(cur != NULL || !st.empty()){
if(cur != NULL){
st.push(cur);
cur = cur->left;
}
else{
cur = st.top();
result.push_back(cur->val);
st.pop();
cur = cur->right;
}
}
return result;
}
};
统一迭代遍历:
狠狠地抄,代码如下:
class Solution {
public:
vector<int> inorderTraversal(TreeNode* root){
vector<int> result;
stack<TreeNode*> st;
if(root != NULL) st.push(root);;
while(!st.empty()){
TreeNode* node = st.top();
if(node != NULL){
st.pop();
if(node->right) st.push(node->right);
st.push(node);
st.push(NULL);
if(node->left) st.push(node->left);
}
else{
st.pop();
node = st.top();
st.pop();
result.push_back(node->val);
}
}
return result;
}
};
102.二叉树的层序遍历
好多题,今天就这样了。
代码如下:
class Solution {
public:
vector<vector<int>> levelOrder(TreeNode* root) {
vector<vector<int>> result;
queue<TreeNode*> que;
if(root != NULL) que.push(root);
while(!que.empty()){
int size = que.size();
vector<int> miniResult;
for(int i = 0; i < size; i++){
TreeNode* node = que.front();
que.pop();
miniResult.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(miniResult);
}
return result;
}
};