zoukankan      html  css  js  c++  java
  • 树的同构--静态链表建树

    在这里插入图片描述
    不熟悉静态链表利用左右子节点下标建树,以及如何寻找根节点,使用静态链表建树传入根节点只要传入根节点下标。

    #include<iostream>
    #include<algorithm>
    #include<stack>
    #include<cstring>
    using namespace std;
    struct node
    {
    	char data;
    	int left;
    	int right;
    }T1[10],T2[10];
    bool check[10];
    int buildTree(node T[])
    {
    	int root=-1, i;
    	int n; cin >> n;   
    	for(int i=0; i<n; i++)check[i]=0;
    	char a, b;
    	for (i = 0; i < n; i++)
    	{
    		cin >> T[i].data >> a>> b;
    		if (a != '-')
    		{
    			T[i].left = a - '0';
    			check[T[i].left] = 1;
    		}	
    		else
    			T[i].left = -1;
    		if (b != '-')
    		{
    			T[i].right = b - '0';
    			check[T[i].right] = 1;
    		}
    		else
    			T[i].right = -1;
    	}
    	for (i = 0; i < n; i++)
    	{
    		if (check[i] != 1)
    		{
    			root = i;
    			break;
    		}
    	}
    	return root;
    }
    bool judge(int R1, int R2) {
    	if (R1 == -1 && R2 == -1) 
    		return true;
    	if (R1 == -1 && R2 != -1 || R1 != -1 && R2 == -1)   
    		return false;
    	if (T1[R1].data != T2[R2].data) 
    		return false;
    	return (judge(T1[R1].left, T2[R2].left) && 
    		judge(T1[R1].right, T2[R2].right))||
    		(judge(T1[R1].right, T2[R2].left) && 
    		judge(T1[R1].left, T2[R2].right));
    }
    int main()
    {
    	int r1, r2;
    	r1 = buildTree(T1);
    	r2 = buildTree(T2);
    	if (judge(r1, r2))
    		cout << "Yes";
    	else
    		cout << "No";
    	return 0;
    }
    
  • 相关阅读:
    0528习题 11-15
    通过文档算学生的平均分
    给定两个列表,转换为 DataFrame 类型
    一千美元的故事(钱放入信封中)
    pandas 几个重要知识点
    python文件操作
    是否感染病毒
    安装 kreas 2.2.4 版本问题
    小技巧_01
    【Liunx】Linux 系统启动过程
  • 原文地址:https://www.cnblogs.com/Hsiung123/p/13811911.html
Copyright © 2011-2022 走看看