#include <iostream>
using namespace std; struct Tree
{
int data;
Tree *lchild;
Tree *rchild;
}tree; Tree *Create(int a1[],int b1[],int n)
{
int k;
if(n<=)
return NULL;
int root=a1[];
Tree *bt=(Tree *)malloc(sizeof(Tree));
bt->data=root;
for(k=;k<n;k++)
{
if(b1[k]==root)
break;//分割左右子树
}
bt->lchild=Create(a1+,b1,k);
bt->rchild=Create(a1+k+,b1+k+,n-k-);
return bt;
} int same(Tree *x1,Tree *x2)
{
if(x1->data!=x2->data)
return -;
if(x1->data==x2->data)
{
if((x1->lchild==NULL&&x2->lchild==NULL)&&(x1->rchild!=NULL&&x2->rchild!=NULL))
return same(x1->rchild,x2->rchild);
if((x1->lchild!=NULL&&x2->lchild!=NULL)&&(x1->rchild==NULL&&x2->rchild==NULL))
return same(x1->lchild,x2->lchild);
if((x1->rchild!=NULL&&x2->rchild==NULL)||(x1->rchild==NULL&&x2->rchild!=NULL)||(x1->lchild!=NULL&&x2->lchild==NULL)||(x1->lchild==NULL&&x2->lchild!=NULL))
return -;
if((x1->lchild==NULL&&x2->lchild==NULL)&&(x1->rchild==NULL&&x2->rchild==NULL))
return ;
if((x1->lchild!=NULL&&x2->lchild!=NULL)&&(x1->rchild!=NULL&&x2->rchild!=NULL))
return (same(x1->rchild,x2->rchild)==&&same(x1->lchild,x2->lchild)==);
}
return ;
} int main()
{
Tree *rt1,*rt2;
int is;
int a1[],b1[],a2[],b2[],N;//N为总节点数,a为先序序列,b为中序序列
cin>>N;
for(int i=;i<N;i++)
cin>>a1[i];
for(int i=;i<N;i++)
cin>>b1[i];
for(int i=;i<N;i++)
cin>>a2[i];
for(int i=;i<N;i++)
cin>>b2[i];
rt1=Create(a1,b1,N);//存树
rt2=Create(a2,b2,N);
is=same(rt1,rt2);
if(is==)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
return ;
}

C++练习 | 递归判断二叉树是否同构的更多相关文章

  1. 非递归遍历二叉树Java实现

    2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...

  2. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  3. 【剑指offer】判断二叉树是否为平衡二叉树

    2013-09-03 14:16:51 面试题39:求二叉树的深度.判断二叉树是否为平衡二叉树 小结: 根据平衡二叉树的定义,需要判断每个结点,因此,需要遍历二叉树的所有结点,并判断以当前结点为根的树 ...

  4. 【easy】110. Balanced Binary Tree判断二叉树是否平衡

    判断二叉树是否平衡 a height-balanced binary tree is defined as a binary tree in which the depth of the two su ...

  5. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  6. [Leetcode 100]判断二叉树相同 Same Tree

    [题目] 判断二叉树是否相同. [思路] check函数. p==null并且q==null,返回true;(两边完全匹配) p==null或q==null,返回false;(p.q其中一方更短) p ...

  7. c++实现二叉树层序、前序创建二叉树,递归非递归实现二叉树遍历

    #include <iostream> #include <cstdio> #include <stdio.h> #include <string> # ...

  8. 使用递归打印二叉树的左视图 java

    使用递归打印二叉树的左视图 java package com.li.jinRiTouTiao; public class PrintLeftView { static class TreeNode{ ...

  9. 9-2、大型项目的接口自动化实践记录----递归判断两个json串是否相等

    1.已知json串构成的情况下判断 先构造一下场景,假设已经把各个数据都移除掉不对比的字段 图1 预期.实际结果,复杂接口返回多层嵌套json时,同下 图2 预期.实际结果值为:{child_json ...

随机推荐

  1. 移动目标在三维GIS中的实现方法

    对于基于ArcGIS Runtime的应用程序,其实现方法比较简单,可以直接更新图形的Geometry属性,即可实现位置的移动: private void AddGraphics() { var gl ...

  2. VMware虚拟机上配置CentOS联网

    转自https://www.cnblogs.com/cindy-cindy/p/6784536.html 1.首先保证虚拟机的网络适配器为NAT模式 2.设置虚拟机的“编辑”-->“虚拟网络编辑 ...

  3. SVN - Checksum mismatch while updating

    Go to the folder with the file causing problems Execute command svn update --set-depth empty (note: ...

  4. 搭建hustoj

    环境:centos6.5 + LAMP环境 LAMP环境的搭建可以参考下面这篇文章 http://www.cnblogs.com/yoke/p/7257184.html 搭建完LAMP环境之后可以按照 ...

  5. Install dotNet Core on Mac

    1. 按照官方页面进行安装 https://www.microsoft.com/net/core#macos 2. 在运行"brew link --force openssl" 时 ...

  6. sql server 查询分析器中表名无效,有红线,其实是这张表的

    ctrl+shift+R 就OK了,就是刷新本地缓存.

  7. js时间戳转换日期

    //js时间戳转换日期function formatDate(now) { var year=now.getFullYear(); var month=now.getMonth()+1; var da ...

  8. aspnetcore 认证相关类简要说明一

    首先我想要简要说明是AuthenticationScheme类,每次看到Scheme这个单词我就感觉它是一个很高大上的单词,其实简单翻译过来就是认证方案的意思.既然一种方案,那我们就要知道这个方案的名 ...

  9. 动态展开tableView的cell[1]

    动态展开tableView的cell[1] 源码地址:https://github.com/xerxes235/HVTableView 虽然作者写的demo很好看,可是,你很难理解他是怎么玩的-_-! ...

  10. Java学习---Collection的学习

    Collection基本方法的使用 package com.huawei.ftl; import java.io.File; import java.io.FileInputStream; impor ...