树的静态写法
struct node{
typename data;
vector child;
}Node[maxn];
int index = 0;
int newNode(int v){
Node[index].data = v;
Node[index].child.clear();
return index++;
}
树的先根遍历
void PreOrder(int root){
printf("%d ", Node[root].data);
for(int i = 0; i < Node[root].child.size(); i++){
PreOrder(Node[root].child[i]);
}
}
树的层序遍历
void LayerOrder(int root){
queue<int> Q;
Q.push(root);
while(!Q.empty()){
int front = Q.front();
printf("%d ", Node[front].data);
Q.pop();
for(int i = 0;i < Node[front].child.size(); i++){
Q.push(Node[front].child[i]);
}
}
}
同样如果需要对结点的层号进行求解只需要在结构体node的定义中增加变量来记录结点的层号
struct node{
int layer; //记录层号
int data;
vector<int> child;
};
于是对于树的层序遍历还可以写成这样
struct node{
int layer; //记录层号
int data;
vector<int> child;
};
void LayerOrder(int root){
queue<int> Q;
Q.push(root);
Node[root].layer = 0;
while(!Q.empty()){
int front = Q.front();
printf("%d ", Node[front].data);
Q.pop();
for(int i = 0; i < Node[front].child.size(); i++){
int child = Node[front].child[i];
Node[child].layer = Node[fornt].layer + 1;
Q.push(child);
}
}
}