描述

设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。

输入

多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。

输出

每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。

输入样例 1

abcd00e00f00ig00h00
abcd00e00f00ig00h00
abd00e00cf00g00
abd00e00cf00h00
0

输出样例 1

YES
NO

思路(WA的可能情况)

首先遍历算法是一个递归算法,什么是递归?就是重复调用多次,但是每次只执行一遍,所以用的是if(T1&&T2)而不是while

其次,在输出的时候可能会想到在主函数里设置一个flag来接收Traverse的返回值以判断输出信息的思路,但是这个思路在以前或许适用,在这里不适用,因为仔细看,Traverse函数在应该YES的情况根本没有返回值,所以这个方法不适用。

代码:

#include <iostream>
using namespace std;
typedef struct BiTNode
{char data;struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void CreateBiTree(BiTree &T)
{char ch;cin>>ch;if(ch=='0')T=NULL;else{T=new BiTNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}
void CreateBiTree(BiTree &T,char ch)
{if(ch=='0')T=NULL;else{T=new BiTNode;T->data=ch;CreateBiTree(T->lchild);CreateBiTree(T->rchild); }
}
int Traverse(BiTree T1,BiTree T2)
{if(T1&&T2)//不能写while,因为这是递归,每次执行一次,但是调用多次 {if(T1->data!=T2->data){cout<<"NO"<<endl; return -1;//不能用flag,因为这个函数的else不一定返回值 !! }else{Traverse(T1->lchild,T2->lchild);Traverse(T1->rchild,T2->rchild);}    }
}
int main()
{while(1){char ch;cin>>ch;if(ch=='0')break;BiTree T1,T2;CreateBiTree(T1,ch);CreateBiTree(T2);if(Traverse(T1,T2)!=-1)cout<<"YES"<<endl;}return 0;
}

3002基于二叉链表的树结构相等的判断(附WA的可能情况)相关推荐

  1. 3008基于二叉链表的二叉树的遍历(附可能的WA解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...

  2. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  3. 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)

    基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...

  4. 3010基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  5. 3003基于二叉链表的二叉树左右子树的交换

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...

  6. 【数据结构】基于二叉链表的二叉树结点个数的统计

    基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...

  7. 基于二叉链表的二叉树高度的计算

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...

  8. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

  9. 3004基于二叉链表的二叉树的双序遍历(附题意解释)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...

最新文章

  1. C++从零实现神经网络(收藏版:两万字长文)
  2. AIX上如何启动和停止系统服务
  3. DotNetNuke(DNN)升级攻略(DNN 4.3.7至DNN 4.6.0)
  4. python中二分查找什么意思_python中二分查找法的实现方法
  5. 牛客 - 牛牛的最大兴趣组(思维+数论)
  6. java timer线程结束_Java线程Timer定时器用法详细总结
  7. 【MySQL】MySQL 8 ERROR 1193 (HY000): Unknown system variable ‘tx_isolation‘
  8. python爬取千图网高清图
  9. 多旋翼姿态解算之Mahony互补滤波
  10. android 自定义view参数,Android自定义View:MeasureSpec的真正意义与View大小控制
  11. oracle数据库lpad,Oracle数据库之oracle中的decode的使用LPAD
  12. 2020家用千兆路由器哪款好_家用路由器哪个牌子好穿墙2020
  13. 【Linux】3.0Linux进程概念
  14. Win10电脑很卡反应很慢该如何处理
  15. 基于java web的在线电影网_视频点播系统-计算机毕业设计
  16. ROS——roscpp
  17. 时间片(time-slicing)轮循调度(round-robin scheduling)
  18. VCam 能做什么?
  19. iconfont阿里图标引入不生效的解决方法,三种引入方式详细步骤。
  20. 触摸屏“G+G、G+P、G+F”是什么意思?

热门文章

  1. 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
  2. python3.7.2安装pywifi_python pywifi
  3. Maven的基本应用
  4. 操作类名-对象语法//操作类名-数组语法
  5. Holer实现外网访问本地MySQL数据库
  6. 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)...
  7. 线性表的链式存储集成
  8. oracle 锁表 and 解锁
  9. Meta http-equiv 大全
  10. Flutter中Contrainer 组件的宽高限制分析