二叉树
template<typename T>
struct BiTNode{
BiTNode(){}
T val;
BiTNode *left,*right;
};
using node=BiTNode<int>;
void build(node* &root){
int val;cin>>val;
if(val==-1){root=NULL;return;}
root=new node;root->val=val;
build(root->left);build(root->right);
}
int leaf(node *Tree)
{
if(Tree==NULL)return 0;
if(Tree->left==NULL && Tree->right==NULL)return 1;
return leaf(Tree->left)+leaf(Tree->right);
}
int depth(node *root,int p)
{
if(root=NULL)return p;
return max(depth(root->left,p+1),depth(root->right,p+1));
}
void dfs_pre(node *Tree)
{
if(Tree==NULL){return ;}
printf("%d ",Tree->val);
dfs_pre(Tree->left);
dfs_pre(Tree->right);
}
void dfs_mid(node *Tree){
if(Tree==NULL)return;
dfs_mid(Tree->left);
printf("%d ",Tree->val);
dfs_mid(Tree->right);
}
void dfs_rear(node *Tree)
{
if(Tree==NULL){return ;}
dfs_rear(Tree->left);
dfs_rear(Tree->right);
printf("%d ",Tree->val);
}
void bfs_pre(node *Tree)
{
stack<node*>Stack;
node *p=Tree;
while(p!=NULL||!Stack.empty())
{
if(p)
{
printf("%d ",p->val);
Stack.push(p);
p=p->left;
}
else
{
p=Stack.top();
Stack.pop();
p=p->right;
}
}
}
void bfs_mid(node *Tree)
{
stack<node*>Stack;
node *p=Tree;
while(p!=NULL||!Stack.empty())
{
if(p)
{
Stack.push(p);
p=p->left;
}
else
{
p=Stack.top();
Stack.pop();
printf("%d ",p->val);
p=p->right;
}
}
}
void bfs_rear(node *Tree)
{
stack<node*>Stack;
Stack.push(Tree);
node *pre,*cur;
cur=pre=NULL;
while(!Stack.empty())
{
cur=Stack.top();
if((cur->left == NULL && cur->right == NULL) \
|| (pre != NULL && (pre == cur->left || pre == cur->right)))
{
printf("%d ",cur->val);
cur=Stack.top();
Stack.pop();
pre=cur;
}
else
{
if(cur->right!=NULL)Stack.push(cur->right);
if(cur->left!=NULL)Stack.push(cur->left);
}
}
}
BST
template<typename T>
struct BiTNode{
BiTNode(){left=NULL,right=BULL;}
T val;
BiTNode *left,*right;
};
using node=BiTNode<int>;
node* insert(node* root,int key){
if(root==NULL){
root=new node();
root->val=key;
return root;
}
if(key<root->val)root->left=insert(root->left,key);
else root->right=insert(root->right,key);
return root;
}
node* find(node* root,int key){
if(root==NULL)return NULL;
if(key==root->val)return root;
if(key>root->val)return find(root->right,key);
return find(root->left,key);
}
node* erase(node* root, int key) {
if(root==NULL)return NULL;
if(key<root->val)root->left=erase(root->left,key);
else if(key>root->val)root->right=erase(root->right,key);
else if(root->val==key){
if(root->left&&root->right){
node *p=root->left;
while(p->right)p=p->right;
root->val=p->val;
root->left=erase(root->left,p->val);
}else{
node *p=root->left?root->left:root->right;
delete root;return p;
}
}
return root;
} 
京公网安备 11010502036488号