以下代码为普通二叉树的创建和两个二叉树的比较算法,两个算法的思想都是递归思想,在下面代码中,我会具体注释为什么这么写。
#include
#include
#include
using namespace std;
struct Tree
{
int data;
struct Tree *left,*right;//左子树和右子树
};
void create(struct Tree *&T,int key)
{
if(T == NULL)//二叉树在创建时,一定是从根开始遍历每一个节点,所以只有当节点为空时才进行赋值操作。
{
T = (struct Tree *)malloc(sizeof(struct Tree));//节点为空就一定要先申请地址在进行操作
T->data = key;//赋值
T->left = T->right = NULL;
}
else
{//当节点不为空时,就面临着到底是往左走还是往右走,这里需要声明,二叉搜索树左子树一定小于双亲,右子树一定大于双亲,可以发现,当前的T一定是一个双亲节点,那么我们通过在对此节点的比较中就可以找出左右方向
if(keydata)
create(T->left,key);//这里就是递归思想,我们不知道子树是否为空,所以不直接赋值,直接递归调用,此句为创建树的核心语句
else
create(T->right,key);
}
}
int compare(struct Tree *t1,struct Tree *t2)
{
if(t1 == NULL && t2 == NULL)//如果两棵树都是空的,那么我们直接返回1
return 1;
if(t1&&t2)//如果金有一颗是空,那么我们返回0
if(t1->data == t2->data)//判断根(此结点)是否相同
if(compare(t1->left,t2->left)&&compare(t1->right,t2->right)//当前结点相同之后,一定要判断左右子树是否相同,另外,要从此结点同时向左右寻找左右子树
return 1;
return 0;
}
int main()
{
struct Tree *t1,*t2;
int N,L,i;
int a;
while(scanf("%d",&N)&&N)
{
if(N==0)
return 0;
cin>>L;
t1 = NULL;
for(i = 0; i < N; i++)
{
cin>>a;
create(t1,a);//遍历树的重心在:每次遍历一定要从根开始遍历
}
while(L–)
{
t2 = NULL;
for(i = 0;i < N; i++)
{
cin>>a;
create(t2,a);
}
if(compare(t1,t2))
cout<<“Yes”<<endl;
else
cout<<“No”<<endl;
}
}
}

二叉搜索树的创建和比较相关推荐

  1. 二叉树:二叉搜索树的创建和插入

    二叉搜索树又名二叉排序树. 大概简略的思维导图如下,方便记忆特性 基本二叉搜索树创建过程如下 /*数据结构如下*/ typedef struct tree {int data;struct tree ...

  2. 二叉搜索树的创建、插入、遍历、删除

    二叉搜索树 本文主要记录自己完成学校课程布置的有关"二叉搜索树"的代码闯关题的代码和思路心得,部分内容有借鉴身边大佬,借鉴部分会有标注. 二叉搜索树的结构体定义 struct no ...

  3. 二叉搜索树的创建以及删除

    #include <stdio.h> #include <stdlib.h> #define EOR -1typedef int EleType;//typedef 定义存放数 ...

  4. 平衡二叉搜索树的创建

    平衡二叉搜索树 平衡二叉树:每个结点的左右子树高度差不超过1,左右子树均为平衡二叉树 搜索二叉树:左结点 < 根结点 <右结点 平衡二叉搜索树则是优化后的搜索二叉树,使得查找的效率提升,但 ...

  5. 数据结构与算法 整理笔记---二叉搜索树

    二叉搜索树 查找问题是计算机中非常重要的基础问题 二分查找法 对于有序数组,才能使用二分查找法(排序作用) public class BinarySearch {public static int b ...

  6. 二叉搜索树-创建最小高度树(递归)

    题意: 给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树. 这里回忆一下二叉搜索树的概念: 对于树中的所有子树都有,左子树上的值都小于根节点的值,右子树上的值 ...

  7. 二叉搜索树(创建,插入,删除):基础篇,适合新手观看。

    1.1 二叉搜索树的插入 二叉搜索树的概念相信大家都很清楚,无非就是左小右大 创建二叉搜索树,其实就是多次调用二叉搜索树的插入方法,所以首先我们来讲讲如何插入节点到二叉搜索树里,假设一颗二叉搜索树如下 ...

  8. 按照层次序列创建二叉树,并判断二叉树是否为二叉搜索树

    首先定义树节点的数据结构,如下: struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; }; 两个函数,用 ...

  9. 前序中序、后序中序遍历创建二叉树,并检验是否是二叉搜索树,若是则转换为双向链表

    finalbst.h //该程序的作用是根据所给的前序序列以及中序序列或者中序序列以及后序序列创建二叉树 #include <iostream> #include <vector&g ...

  10. 最适合新手看的平衡二叉搜索树(BBST)的创建,包含详细过程,一看就会(C++版)

    写在前面:本人大二小白,本篇文章是我第一次写博客,用来记录我的学习过程,我想将我在学习中遇到的各种的问题和困难写下来,希望大家能够不要犯同样的错误.我会尽可能的详细的把每一个步骤都解释清楚,那么废话不 ...

最新文章

  1. c语言程序计算p q真值表,C语言程序设计第2章数据类型﹒运算符和表达式.ppt
  2. <java并发编程实践>读书笔记三
  3. 4.3. postForObject
  4. 太阳的光和灯光有什么区别_墙体彩绘机UV(油性)和水性墨水怎么选择?有什么区别?...
  5. 自称迪拜十星级酒店,震撼了!
  6. __set() And __get() 使用详解.
  7. java关闭按钮代码_Java高手看看如何实现关闭按钮
  8. 吴恩达深度学习4.4练习_Convolutional Neural Networks_Face Recognition for the Happy House
  9. codeblocks中文编码问题
  10. Fabric学习--环境搭建
  11. Windows登录密码破解
  12. 数独基本规则_数独入门:你必须掌握的那些规则和技巧
  13. 【工程应用】用Redis存储特征
  14. PMP思维导图—项目经理的角色
  15. java long保留两位小数
  16. 大一第一学期期末C语言程序设计笔记(一)
  17. Android4.4蓝牙耳机HFP流程分析-1
  18. MATLAB——基于图像相减的纸牌识别系统
  19. SQL 报错:聚合函数无法与其他非分组字段混用
  20. IDEA查找关键字快捷键,很实用。

热门文章

  1. 如何根据相机的参数知道摄像机的内参数矩阵
  2. homebrew下安装mysql_Mac下homebrew安装Mysql以及配置问题
  3. python九九乘法表矩形_用Python实现九九乘法表
  4. 拓端tecdat|R语言在地图上绘制散点饼图可视化
  5. 拓端tecdat|用R语言模拟混合制排队随机服务排队系统
  6. 拓端tecdat|R语言中绘制ROC曲线和PR曲线
  7. avedev matlab,avedev(avedev是什么函数)
  8. ERROR: Cannot uninstall ‘wrapt‘. It is a distutils installed project and thus we cannot accurately
  9. python后台执行代码
  10. Leetcode-9-回文数(简单)