深度优先——递归
// 先序遍历
void dfs(TreeNode* node){
if(!node){
return;
}
cout<<node->val;
dfs(node->left);
dfs(node->right);
}
// 中序遍历
void dfs(TreeNode* node){
if(!node){
return;
}
dfs(node->left);
cout<<node->val;
dfs(node->right);
}
// 后序遍历
void dfs(TreeNode* node){
if(!node){
return;
}
dfs(node->left);
dfs(node->right);
cout<<node->val;
}
深度优先——非递归
void dfs(TreeNode *pRoot)
{
if (!pRoot) return;
stack<TreeNode*> s;
TreeNode* cur = pRoot;
while (cur || !s.empty()) {
while (cur) {
s.push(cur);
cur = cur->left;
}
cur = s.top();
cout<<cur.val;
s.pop();
cur = cur->right;
}
return true;
}
广度优先——非递归(树的层次遍历)
void bfs(TreeNode* root)
{
if(!root) return;
queue<TreeNode*> l;
TreeNode *cur=root;
l.push_back(cur);
while(!l.empty())
{
//如果需要按层次进行某些事情在需要解开注释,在当前层次遍历
// int cnt=l.size();
// while(cnt--)
// {
TreeNode *temp=l.front();
cout<<temp->val;
l.pop_front();
if(temp->left)l.push_back(temp->left);
if(temp->right)l.push_back(temp->right);
//}
}
return res;
}