递归遍历比较简单~
前序遍历-递归
void preOrderTraversal(TreeNode* root){
if(root == nullptr){
return;
}
visit(root);
preOrderTraversal(root->left);
preOrderTraversal(root->right);
}
前序-非递归遍历-借助辅助栈
#include <iostream>
#include <stack>
#include <vector>
using namespace std;
vector<int> preOrderTraversal(TreeNode* root){
vector<int> result;
if(root == nullptr){
return result;
}
stack<TreeNode*> s;
s.push(root);
while(!s.empty()){
TreeNode* currentNode = s.pop();
result.push_back(currentNode->value);
if(currentNode->right){
s.push(currentNode->right);
}
if(currentNode->left){
s.push(currentNode->left);
}
s.pop();
}
return result;
}
中序遍历-递归
void inOrderTraversal(TreeNode* root){
if(root == nullptr){
return;
}
inOrderTraversal(root->left);
visit(root);
inOrderTraversal(root->right);
}
中序-非递归遍历-借助辅助栈
#include <iostream>
#include <stack>
using namespace std;
vector<int> inOrderTraversal(TreeNode* root){
vector<int> result;
if(root == nullptr){
return result;
}
stack<TreeNode*> s;
TreeNode* currentNode = root;
while(currentNode != nullptr){
while(currentNode != nullptr){
s.push(currentNode);
currentNode = currentNode->left;
}
if(!s.empty()){
currentNode = s.top();
result.push_back(currentNode->value);
currentNode = currentNode->right;
}
}
return result;
}
后序遍历–递归
void postOrderTraversal(TreeNode* root){
if(root == nullptr){
return;
}
postOrderTraversal(root->left);
postOrderTraversal(root->right);
visit(root);
}
后序遍历–非递归实现
层序遍历–递归
层序遍历–非递归实现
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
vector<int> levelOrderTraversal(TreeNode* root){
vector<int> result;
if(root == nullptr){
return result;
}
queue<TreeNode*> q;
q.push(root);
while(!q.empty()){
TreeNode* currentNode = q.front();
result.push(currentNode->value);
if(currentNode->left != nullptr){
result.push(currentNode->left);
}
if(currentNode->left != nullptr){
result.push(currentNode->right);
}
q.pop();
}
return result;
}