3002基于二叉链表的树结构相等的判断(附WA的可能情况)
设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。
输入
多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘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的可能情况)相关推荐
- 3008基于二叉链表的二叉树的遍历(附可能的WA解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别实现二叉树的先序.中序和后序遍历. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时 ...
- 3006基于二叉链表的二叉树最长路径的求解(附思路)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...
- 3010基于二叉链表的二叉树高度的计算(附思路,WA的一种可能情况及代码)
基于二叉链表的二叉树高度的计算 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为 ...
- 3010基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3003基于二叉链表的二叉树左右子树的交换
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为空) ...
- 【数据结构】基于二叉链表的二叉树结点个数的统计
基于二叉链表的二叉树结点个数的统计 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写三个递归算法分别对二叉树的结点(度为0.1.2)个数进行统计. 输入 多组数据.每组数 ...
- 基于二叉链表的二叉树高度的计算
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法计算二叉树的高度. 输入 多组数据.每组数据一行,为二叉树的前序序列(序列中元素为'0'时,表示该结点为空).当输 ...
- 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)
以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...
- 3004基于二叉链表的二叉树的双序遍历(附题意解释)
描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法实现该二叉树的双序遍历(双序遍历是指对于二叉树的每一个结点来说,先访问这个结点,再按双序遍历它的左子树,然后再一次 ...
最新文章
- C++从零实现神经网络(收藏版:两万字长文)
- AIX上如何启动和停止系统服务
- DotNetNuke(DNN)升级攻略(DNN 4.3.7至DNN 4.6.0)
- python中二分查找什么意思_python中二分查找法的实现方法
- 牛客 - 牛牛的最大兴趣组(思维+数论)
- java timer线程结束_Java线程Timer定时器用法详细总结
- 【MySQL】MySQL 8 ERROR 1193 (HY000): Unknown system variable ‘tx_isolation‘
- python爬取千图网高清图
- 多旋翼姿态解算之Mahony互补滤波
- android 自定义view参数,Android自定义View:MeasureSpec的真正意义与View大小控制
- oracle数据库lpad,Oracle数据库之oracle中的decode的使用LPAD
- 2020家用千兆路由器哪款好_家用路由器哪个牌子好穿墙2020
- 【Linux】3.0Linux进程概念
- Win10电脑很卡反应很慢该如何处理
- 基于java web的在线电影网_视频点播系统-计算机毕业设计
- ROS——roscpp
- 时间片(time-slicing)轮循调度(round-robin scheduling)
- VCam 能做什么?
- iconfont阿里图标引入不生效的解决方法,三种引入方式详细步骤。
- 触摸屏“G+G、G+P、G+F”是什么意思?
热门文章
- 不同用户同时并发测压_教你 7 招,迅速提高服务器并发能力!
- python3.7.2安装pywifi_python pywifi
- Maven的基本应用
- 操作类名-对象语法//操作类名-数组语法
- Holer实现外网访问本地MySQL数据库
- 潭州课堂25班:Ph201805201 django框架 第五课 自定义简单标签,包含标签,模型类创建,梳理类创建 (课堂笔记)...
- 线性表的链式存储集成
- oracle 锁表 and 解锁
- Meta http-equiv 大全
- Flutter中Contrainer 组件的宽高限制分析