树的应用之相同树的判断
来源:互联网 发布:select两张表所有数据 编辑:程序博客网 时间:2024/06/14 03:40
什么是两颗树相等?
这里需要节点在树中的位置和数值都一样。
如何判断呢?
其实也是用到了递归的思想,从根节点开始,判断值是否相同,若相同,分别递归进左右子树,只要有一点不匹配,返回false。
思路如下:
1.先判断根节点是否都为空----若是,直接返回1;若一个空一个不空,直接返回0
2.在判断根节点的值----若不相等,直接返回0;若相等,递归进左右子树
详细代码:
#include <stdio.h>#include <iostream>using namespace std;#define MaxTree 10typedef char ElementType;typedef int Tree;struct TreeNode{ ElementType Data; Tree Left; Tree Right;} T1[MaxTree], T2[MaxTree];Tree BuildTree(struct TreeNode T[]);int Isomorphic(Tree R1, Tree R2);int main(){ Tree R1, R2; R1 = BuildTree(T1); R2 = BuildTree(T2); if (Isomorphic(R1, R2)) printf("Yes\n"); else printf("No\n"); return 0;}Tree BuildTree(struct TreeNode T[]){ int N; Tree Root; // 根结点 cin >> N; if (N) { int *check = new int[N]; for (int i = 0; i < N; i++) check[i] = 0; for (int i = 0; i < N; i++) { char c_left, c_right; cin >> T[i].Data >> c_left >> c_right; if (c_left != '-') { T[i].Left = c_left - '0'; check[T[i].Left] = 1; } else { T[i].Left = -1; } if (c_right != '-') { T[i].Right = c_right - '0'; check[T[i].Right] = 1; } else { T[i].Right = -1; } } int i; for (i = 0; i < N; i++) { if (!check[i]) break; } Root = i; } else Root = -1; return Root;}int Isomorphic(Tree R1, Tree R2){ if ((R1 == -1) && (R2 == -1))//判断节点是否都空 return 1; if (((R1 == -1) && (R2 != -1)) || ((R1 != -1) && (R2 == -1)))//判断节点是否一个空一个不空 return 0; if (T1[R1].Data != T2[R2].Data)//判断节点的数值是否相等 return 0; else { return Isomorphic(T1[R1].Left,T2[R2].Left) && Isomorphic(T1[R1].Right,T2[R2].Right);// 递归进入左右子树 }}
阅读全文
0 0
- 树的应用之相同树的判断
- LeetCode OJ 之 Same Tree (相同树的判断)
- Same Tree 判断相同的树
- 判断是否相同的二叉搜索树
- 判断两棵二叉树是否相同的树
- 相同树判断
- 零零散散学算法之判断集合的相同&相似性
- C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同
- 100.判断树是否相同
- 判断t1树是否包含t2树全部相同的拓扑结构
- hdu1671Phone List(字典树---判断有无相同的前缀单词)
- 判断两张表的数据是否相同
- 判断是否有相同的数字
- 判断所有的字符不相同
- 关于两个"集合"相同的判断
- javascript判断连续相同的字符
- 判断两颗二叉树是否相同
- 判断两个二叉树是否结构相同
- java实现树形展示
- 谈PHP中信息加密技术
- weiphp2.0:关于OneThink后台添加密码重置的功能
- numpy中的ndarray与pandas的Series和DataFrame之间的相互转换
- codeforces 888C K-Dominant Character
- 树的应用之相同树的判断
- 自定义包及模块的导入
- Unity中物体添加刚体属性后,运行出现掉落情况如何解决?
- Dubbo 疯狂更新!阿里开源要搞大事情?
- shell脚本监控进程
- Linux基础命令(三)之top详解
- JAVA中获取文件MD5值的四种方法
- 稀疏矩阵的快速转置
- redis有序集合相关命令