二叉树几个基本操作
二叉树结构
struct TreeNode{
int val;
TreeNode* left= nullptr;
TreeNode* right= nullptr;
explicit TreeNode(int v):val(v){}
};
层序生成二叉树
给定一个数num,生成层序为从0到num的二叉树
TreeNode* TreeInit(int num){
auto new_root = new TreeNode(0);
queue<TreeNode*> q; //辅助队列
int i=1;
auto p=new_root;
bool flag = false;
while (i<=num){
if (!flag){
p->left = new TreeNode(i);
q.push(p->left);
flag = true;
i++;
continue;
}
else {
p->right = new TreeNode(i);
q.push(p->right);
p=q.front();
q.pop();
flag = false;
i++;
continue;
}
}
return new_root;
}
前中后序遍历二叉树
void PreTraverse(TreeNode* root){
if (root== nullptr){
return;
}
cout<<root->val<<' ';
PreTraverse(root->left);
PreTraverse(root->right);
}
void MidTraverse(TreeNode* root){
if (root== nullptr){
return;
}
MidTraverse(root->left);
cout<<root->val<<' ';
MidTraverse(root->right);
}
void LasTraverse(TreeNode* root){
if (root== nullptr){
return;
}
LasTraverse(root->left);
LasTraverse(root->right);
cout<<root->val<<' ';
}
层次遍历
void LevelTraverse(TreeNode* root){
queue<TreeNode*> q;
q.push(root);
while (!q.empty()){
if (q.front()->left!= nullptr){
q.push(q.front()->left);
}
if (q.front()->right!= nullptr){
q.push(q.front()->right);
}
cout<<q.front()->val<<' ';
q.pop();
}
}

