这里还是有问题的,使用vector的话确实应该用push_back(),主要在每个节点的孩子节点关系建立上,参考代码2
代码1:
#include <stdio.h>
#include <queue>
#include <vector>
using namespace std;
const int maxn = 100;
struct node{
int data;
vector<int> child;
}Node[maxn];
int index = 0;
int newNode(int v){
//printf("1");
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]);
}
}
}
int main(){
for(int i = 0;i <7;i++){
newNode(i*2);
}
printf("逐个输出节点的数据:\n");
for(int i = 0;i <7;i++){//输出数据
printf("%d ",Node[i].data);
}
Node[0].child.push_back(1),Node[0].child.push_back(2),Node[0].child.push_back(3);
Node[1].child.push_back(4),Node[1].child.push_back(5);
//Node[2].child.size() == 0;//这到底有啥意义?
Node[3].child.push_back(6);
//Node[4].child.size() == 0,Node[5].child.size() == 0,Node[6].child.size() == 0;
printf("\n前序遍历为\n");
preorder(0);
printf("\n层序遍历为\n");
Layerorder(0);
}
代码2:
地址:https://blog.csdn.net/weixin_44307065/article/details/100051250
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
const int maxn=10010;
struct Node
{
int data;
vector<int>child;
}node[maxn];
void creat(int n)
{
int num,index;
for(int i=0;i<n;i++)
{
scanf("%d %d",&node[i].data,&num);
while(num--)
{
scanf("%d",&index);
node[i].child.push_back(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]);//访问root的所有子节点
}
}
void Layerorder(int root)//树的层序遍历
{
queue<int>que;
que.push(root);
while(!que.empty())
{
int temp=que.front();
printf("%d ",node[temp].data);
for(int i=0;i<node[temp].child.size();i++)
{
que.push(node[temp].child[i]);
}
que.pop();
}
}
int main()
{
int n;
scanf("%d",&n);
creat(n);
preorder(0);
Layerorder(0);
return 0;
}
/*
7
0 3
1 2 3
1 2
4 5
2 0
3 1
6
4 0
5 0
6 0
*/