深度优先——递归
// 先序遍历
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;
}