09:43:33 2019-08-27

努力

 

对于非空二叉树  ${n_0}$是表示叶节点的个数

${n_0}+{n_1}+{n_2}-{1}=0*{n_0}+1*{n_1}+2*{n_2}$

即可得出

${n_0}={n_2}+{1}$

二叉树的遍历方法

数据结构学习第十二天

 

PTA  第6题 判断2个树是否同构

 1 #define _CRT_SECURE_NO_WARNINGS 
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 struct  TreeNode
 5 {
 6     char Data;
 7     int LChild;
 8     int RChild;
 9 }Tree1[10],Tree2[10];
10 
11 int Change(const char num)    //将读入的字符修改后返回
12 {
13     if (num != '-')
14         return num - '0';
15     else
16         return -1;
17 }
18 int Charge(int T1,int T2)   //判别2个树是否重构
19 {
20     if (T1 == -1 && T2 == -1)   //都为空树 为同构
21         return 1;
22     if ((T1 == -1 && T2 != -1) || (T1 != -1 && T2 == -1)) //一空 一不空 不同构
23         return 0;
24     if (Tree1[T1].Data != Tree2[T2].Data)  //节点的值不一样 不同构
25         return 0;
26     if (Tree1[T1].LChild == -1 && Tree2[T2].LChild == -1)    //无左子树
27         return Charge(Tree1[T1].RChild, Tree2[T2].RChild);
28     if ((Tree1[T1].LChild != -1 && Tree2[T2].LChild != -1) && Tree1[Tree1[T1].LChild].Data == Tree2[Tree2[T2].LChild].Data)
29         return (Charge(Tree1[T1].LChild, Tree2[T2].LChild) && Charge(Tree1[T1].RChild, Tree2[T2].RChild));
30     else
31         return (Charge(Tree1[T1].LChild, Tree2[T2].RChild) && Charge(Tree1[T1].RChild, Tree2[T2].LChild));
32 }
33 int BulidTree(struct TreeNode Tree[])
34 {
35     int N;
36     int Root=0;
37     int Check[10] = { 0 };     //用数组来记录哪个值未出现
38     scanf("%d", &N);
39     if (!N)
40     {
41         Root = -1;
42     }
43     char c, num1, num2;
44     for (int i = 0; i < N; i++)
45     {
46         getchar();
47         scanf("%c %c %c", &c, &num1, &num2);
48         Tree[i].Data = c;
49         Tree[i].LChild = Change(num1);   //对字符进行改变 并返回整数
50         if (Tree[i].LChild != -1) Check[Tree[i].LChild] = 1;
51         Tree[i].RChild = Change(num2);
52         if (Tree[i].RChild != -1) Check[Tree[i].RChild] = 1;
53     }
54     for (int i = 0; i < N; i++)
55         if (!Check[i])
56         {
57             Root = i;
58             break;
59         }
60     return Root;
61 }
62 int main()
63 {
64     int TreeA, TreeB;
65     TreeA = BulidTree(Tree1);
66     TreeB = BulidTree(Tree2);
67     if (Charge(TreeA,TreeB))
68         printf("Yes");
69     else
70         printf("No");
71 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2021-04-08
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案