遍历
定义二叉树结构体的两种方式:
在建立新节点的时候,用以下方式:(第一个if语句)
建树
先序遍历
先序遍历完整代码:例题 The order of a Tree HDU - 3999
定义二叉树结构体的两种方式:
第一种:
struct node
{
int val;
node *left;
node *right;
node():left(NULL),right(NULL) {}
};
在建立新节点的时候,用以下方式:(第一个if语句)
node *build(node *p,int v)
{
if(p==NULL)
{
p=new node();
p->val=v;
return p;
}
if(p->val > v)
p->left=build(p->left,v);
else if(p->val < v)
p->right=build(p->right,v);
return p;
}
struct node
{
int val;
struct node *left;
struct node *right;
};
node *build(node *p,int v)
{
if(p==NULL)
{
p=new node;
p->left=NULL;
p->right=NULL;
p->val=v;
return p;
}
if(p->val > v)
p->left=build(p->left,v);
else if(p->val < v)
p->right=build(p->right,v);
return p;
}
建树
node *build(node *p,int v) //建立二叉树
{
if(p==NULL)
{
p=new node();
p->val=v;
return p;
}
if(p->val > v)
p->left=build(p->left,v);
else if(p->val < v)
p->right=build(p->right,v);
return p;
}
先序遍历
void pre(node * p) //先序遍历
{
if(p==NULL)
return ;
res.push_back(p->val);
pre(p->left);
pre(p->right);
}
中序遍历
void in(node * p) //中序遍历
{
if(p==NULL)
return ;
in(p->left);
res.push_back(p->val);
in(p->right);
}
后序遍历
void post(node * p) //后序遍历
{
if(p==NULL)
return ;
post(p->left);
post(p->right);
res.push_back(p->val);
}
先序遍历完整代码:例题 The order of a Tree HDU - 3999
#include<stdio.h>
#include<vector>
using namespace std;
vector<int>res;
struct node
{
int val;
node *left;
node *right;
node():left(NULL),right(NULL) {}
};
node *root;
void removetree(node * p) //释放内存
{
if(p==NULL)
return ;
removetree(p->left);
removetree(p->right);
delete(p);
}
node *build(node *p,int v) //建立二叉树
{
if(p==NULL)
{
p=new node();
p->val=v;
return p;
}
if(p->val > v)
p->left=build(p->left,v);
else if(p->val < v)
p->right=build(p->right,v);
return p;
}
void pre(node * p) //先序遍历
{
if(p==NULL)
return ;
res.push_back(p->val);
pre(p->left);
pre(p->right);
}
int main()
{
int n,v;
while(~scanf("%d",&n))
{
res.clear();
removetree(root);
root=new node(); //根节点
scanf("%d",&v);
root->val=v;
n--;
while(n--)
{
scanf("%d",&v);
root=build(root,v);
}
pre(root);
for(int i=0; i<res.size(); i++)
if(!i)
printf("%d",res[i]);
else
printf(" %d",res[i]);
printf("\n");
}
return 0;
}