目录
二叉树
前序遍历
void traversal(TreeNode *cur,vector<int> &vec)
{
if(cur==NULL) return;
vec.pushback(cur>val);//中
traversal(cur->left,vec);//左
traversal(cur->right,vec);//右
}
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> result;
traversal(root,result);
return result
}
中序遍历
void traversal(TreeNode *cur,vector<int> &vec)
{
if(cur==NULL) return;
traversal(cur->left,vec);//左
vec.pushback(cur>val);//中
traversal(cur->right,vec);//右
}
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> result;
traversal(root,result);
return result
}
后续遍历
void traversal(TreeNode *cur,vector<int> &vec)
{
if(cur==NULL) return;
traversal(cur->left,vec);//左
traversal(cur->right,vec);//右
vec.pushback(cur>val);//中
}
vector<int> preorderTraversal(TreeNode *root)
{
vector<int> result;
traversal(root,result);
return result
}
二叉树的层序遍历
这条是广度搜索的流程(用队列实现)
具体思路是:
1、加入首节点进入队列(根据节点类型创建对应的队列)
2、记录当前队列中元素个数(对应此层的元素个数),对队列中的元素开始依次遍历
3、将每层元素加入队列的同时把左右节点加入队列中,进行下一层遍历
queue<TreeNode*> que;
if(root!=NULL) que.push(root);
vector<vector<int>> result;
while(!que.empty())
{
vector<int> vec;
int size=que.size();
while(size--)
{
TreeNode* node=que.front();
que.pop();
vec.push_back(node->val);
if(node->left) que.push(node->left);
if(node->right) que.push(node->right);
}
result.push_back(vec);
}
return result;
}
翻转二叉树
中序遍历会出问题
TreeNode* invertTree(TreeNode* root){
if(root==NULL) return root;
swap(root->left,root->right);
invertTree(root->left);
invertTree(root->left);