解题思路:
定义好树节点,内容应当使可以找到自己的孩子,父亲,以及孩子的个数和数值
创建树
如果是根节点
如果节点存在,直接修改相应的父亲值
不存在就创建节点
不是根节点
如果存在,就直接修改关系
不存在,创建并修改
从当前指向的节点找根节点
从根节点遍历整棵树

参考代码:

  1. #include<cstdio>
  2. #include<iostream>
  3. using namespace std;
  4. #define max 2005
  5. struct tree
  6. {
  7. int data;
  8. int n;//孩子个数
  9. int child[5];//孩子下标
  10. int father;//父亲下标
  11. };
  12. tree a[max];
  13. int initi(int f,int s,int i)//创建树
  14. {
  15. int j=1;int p=0,q=0;
  16. if(f==0)//如果是根节点
  17. {
  18. for(j=1;i<i;j++)
  19. if(a[j].data==s)
  20. break;
  21. if(j!=i) a[j].father=0;
  22. else
  23. {
  24. a[i].data=s;
  25. a[i].n=0;
  26. a[i].father=0;
  27. i++;
  28. }
  29. return i;
  30. }
  31. else {
  32. for(j=1;j<i;j++)
  33. {
  34. if(a[j].data==f) p=j;
  35. if(a[j].data==s) q=j;
  36. }
  37. if(p==0)
  38. {
  39. p=i++;
  40. a[p].data=f;
  41. a[p].n=0;
  42. a[p].father=0;
  43. }
  44. if(q==0)
  45. {
  46. q=i++;
  47. a[q].data=s;
  48. a[q].n=0;
  49. }
  50. a[q].father=p;
  51. a[p].n++;
  52. a[p].child[a[p].n-1]=q;
  53. return i;
  54. }
  55. }
  56. int findroot(int x)//x为下标,一个结点向上遍历找到根,返回root下标
  57. {
  58. if(a[x].father==0) return x;
  59. else {
  60. return findroot(a[x].father);
  61. }
  62. }
  63. int traver(int r)//r为根节点下标,从根节点向下遍历,返回树的结点数ans ;
  64. {
  65. int ans=0;
  66. ans=ans+1;
  67. int i=0,q;
  68. while(a[r].n--){
  69. q=a[r].child[i];
  70. ans=ans+traver(q);
  71. i++;
  72. }
  73. return ans;
  74. }
  75. int main()
  76. {
  77. int i,j,k,ans;
  78. int f,s;
  79. int n;
  80. scanf("%d",&n);
  81. i=1;j=1;
  82. while(j<=n)
  83. {
  84. scanf("%d%d",&f,&s);
  85. i=initi(f,s,i);
  86. j++;
  87. }
  88. int num;
  89. scanf("%d",&num);
  90. for(i=1;i<=n;i++)
  91. {
  92. if(a[i].data==num)
  93. break;
  94. }
  95. int root =findroot(i);
  96. ans =traver(root);
  97. cout<<ans<<endl;
  98. return 0;
  99. }
点赞(1)
 

6 分

2 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论