• 树的同构


    import java.util.*;
    class treenode{
     public char val;
     int left;
     int right;
    }
    public class Main {
     public static int root = -1; //全局变量
     public static treenode[] buildtree(Scanner in){
      treenode[] T = new treenode[10];
      int N = in.nextInt();
            if(N == 0) return null;//空树判断
      int[] check = new int[N];
      for(int i=0;i<N;i++) {
       T[i] = new treenode();//新建结点
       T[i].val = in.next().charAt(0);
       char cl = in.next().charAt(0);//left
       if(cl!='-') {
        T[i].left = cl-'0';
        check[T[i].left]=1;
       }
       else  T[i].left = -1;
       char cr = in.next().charAt(0);//right
       if(cr!='-') {
        T[i].right = cr-'0';
        check[T[i].right]=1;
       }
       else  T[i].right = -1;
       
      }
      int j;
      for(j=0;j<N;j++) {
       if(check[j] == 0) break;
      }
      root = j;
      return T;
      
     }
     static boolean istg(int r1,int r2,treenode[] T1,treenode[] T2 ) {
      if(r1 == -1 && r2 == -1) return true;
      if((r1 == -1 && r2 != -1)||(r2 == -1 && r1 != -1)) return false;
      if(T1[r1].val != T2[r2].val) return false;
      if(T1[r1].left == -1 && T2[r2].left == -1)
       return istg(T1[r1].right,T2[r2].right,T1,T2);
      if(T1[r1].left != -1 && T2[r2].left != -1 && T1[T1[r1].left].val == T2[T2[r2].left].val)
       return (istg(T1[r1].left,T2[r2].left,T1,T2) && istg(T1[r1].right,T2[r2].right,T1,T2));
      else return (istg(T1[r1].left,T2[r2].right,T1,T2) && istg(T1[r1].right,T2[r2].left,T1,T2));
      
      
     }
     public static void main(String[] args) {
      Scanner in = new Scanner(System.in);
      
      treenode[] T1 = buildtree(in);
      int r1 = root;
      treenode[] T2 = buildtree(in);
      int r2 = root;
      if(istg(r1,r2,T1,T2))
      System.out.println("Yes");
      else System.out.println("No");
      
      
     }
    }

    注意:

    只能在main函数里定义scanner in,再传给其他函数,否则会出现读数据出错。

  • 相关阅读:
    nginx,php for window 7(64bit) install
    ret.concat.apply([],ret)
    JavaScript:constructor属性
    jquery 插件address
    学习笔记(C++)
    关于网站缓存设计的几点思考
    Ubuntu20.04 换源 Learner
    什么叫程序集
    c# 中堆和栈的区别
    命名空间和类的概念
  • 原文地址:https://www.cnblogs.com/dyq19/p/10741240.html
Copyright © 2020-2023  润新知