IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2020.11.11问题 B: DS二叉树--同一棵二叉树? -> 正文阅读

[数据结构与算法]2020.11.11问题 B: DS二叉树--同一棵二叉树?

题目描述

二叉树分别以数组存储方式创建、以先序遍历序列创建。输入二叉树的数组存储、先序遍历结果,判断根据它们创建的二叉树是否是同一棵二叉树。

输入

?测试次数t

每组测试数据两行:

第一行:二叉树的数组存储(英文字母表示树结点,#表示空树)

第二行:二叉树的先序遍历结果(英文字母表示树结点,#表示空树)

输出

?对每组测试数据,如果两种方式创建的是同一棵二叉树,输出YES,否则,输出NO。

样例输入

3 ABCDE ABD##E##C## ABC##DE####W##F AB##CDW###E#F## abc##d ab##c#d

样例输出

YES YES NO
#include<iostream> 
#include<string>
#include<queue>
using namespace std;
class BiTreeNode {
public:
	char data;
	BiTreeNode* leftChild;
	BiTreeNode* RightChild;
	BiTreeNode() :leftChild(NULL), RightChild(NULL) {}
	~BiTreeNode() {}
};
class BiTree {
private:
	BiTreeNode* Root;
	int pos;
	string strTree, Tree;
	BiTreeNode* CreateBiTree();
	void Compare();//内部Compare函数 
public:
	BiTree() {};
	~BiTree() {};
	void CreateTree(string TreeArray);
	void Input(string _Tree);//数组存储二叉树输出 
};
void BiTree::CreateTree(string TreeArray) {//函数用于创建二叉树并于数组存储进行比较 
	pos = 0;
	strTree.assign(TreeArray);
	Root = CreateBiTree();
	Compare();
}
BiTreeNode* BiTree::CreateBiTree()
{
	BiTreeNode* T;
	char ch;
	ch = strTree[pos++];
	while(ch){
	if (ch == '#'){
		T = new BiTreeNode();
		T->data='#';
		T->leftChild=NULL;
		T->RightChild=NULL;
	}
	else
	{
		T = new BiTreeNode();
		T->data = ch;
		
		T->leftChild = CreateBiTree();
		T->RightChild = CreateBiTree();
	}
	return T;
}
}
void BiTree::Compare(){
	int i = 0;
	BiTreeNode* p;
	queue<BiTreeNode*> Q;
	Q.push(Root);
	while (i < Tree.length())
	{
		p = Q.front();
		Q.pop();
		if (p) {
			if (p->data != Tree[i])
			{
				cout << "NO" << endl;
				return;//不匹配则结束函数 
			}
			Q.push(p->leftChild);//左子树入队 
			Q.push(p->RightChild);//右子树入队 
		}i++;
	}
	cout << "YES" << endl;//循环完则说明匹配 
}

void BiTree::Input(string _Tree) {
	Tree = _Tree;
}
int main() {
	int t, i;
	cin >> t;
	for (i = 0; i < t; i++) {
		string s1, s2;
		cin >> s1 >> s2;
		BiTree* T = new BiTree();
		T->Input(s1); 
		T->CreateTree(s2);
	}
	return 0;
}

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-11-12 19:50:47  更:2021-11-12 19:52:39 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 10:42:34-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码