- DS二叉树判断--同一棵二叉树?
- 题目描述
- 输入
- 输出
- 输入样例
- 输出样例
- 代码
题目描述
二叉树分别以数组存储方式创建、以先序遍历序列创建。输入二叉树的数组存储、先序遍历结果,判断根据它们创建的二叉树是否是同一棵二叉树。
输入
测试次数t
每组测试数据两行:
第一行:二叉树的数组存储(英文字母表示树结点,#表示空树)
第二行:二叉树的先序遍历结果(英文字母表示树结点,#表示空树)
输出
测试次数t
每组测试数据两行:
第一行:二叉树的数组存储(英文字母表示树结点,#表示空树)
第二行:二叉树的先序遍历结果(英文字母表示树结点,#表示空树)
输入样例
3 ABCDE ABD##E##C ABC##DE####W##F AB##CDW###E#F## abc##d ab##c#d
输出样例
YES YES NO
代码
#includeusing namespace std; class BiTreeNode { public: char data; BiTreeNode *LeftChild; BiTreeNode *RightChild; BiTreeNode():LeftChild(NULL), RightChild(NULL) {} }; class BiTree { public: void CreateTree(string s); void PreOrder(); void InOrder(); BiTreeNode *Root; string preTree; string inTree; private: void PreOrder(BiTreeNode *t); void InOrder(BiTreeNode *t); BiTreeNode *CreateTree(int pos); string strTree; int len; }; void BiTree::InOrder() { InOrder(Root); } void BiTree::InOrder(BiTreeNode *t) { if(t) { InOrder(t->LeftChild); inTree += t->data; InOrder(t->RightChild); } } void BiTree::PreOrder() { PreOrder(Root); } void BiTree::PreOrder(BiTreeNode *t) { if(t) { preTree += t->data; PreOrder(t->LeftChild); PreOrder(t->RightChild); } } void BiTree::CreateTree(string s) { preTree = ""; inTree = ""; len = s.length(); strTree.assign(s); Root = CreateTree(0); } BiTreeNode *BiTree::CreateTree(int pos) { BiTreeNode *T; char ch; if(pos>=len) return NULL; ch = strTree[pos]; if(ch=='#') T = NULL; else { T = new BiTreeNode(); T->data = ch; T->LeftChild = CreateTree(2*pos+1); T->RightChild = CreateTree(2*pos+2); } return T; } class Bittree { public: void CreateTree(string s); void PreOrder(); void InOrder(); BiTreeNode *Root; string preTree; string inTree; private: void PreOrder(BiTreeNode *t); void InOrder(BiTreeNode *t); BiTreeNode *CreateTree(); int pos; string strTree; }; void Bittree::InOrder() { InOrder(Root); } void Bittree::InOrder(BiTreeNode *t) { if(t) { InOrder(t->LeftChild); inTree += t->data; InOrder(t->RightChild); } } void Bittree::PreOrder() { PreOrder(Root); } void Bittree::PreOrder(BiTreeNode *t) { if(t) { preTree += t->data; PreOrder(t->LeftChild); PreOrder(t->RightChild); } } void Bittree::CreateTree(string s) { pos = 0; strTree.assign(s); Root = CreateTree(); } BiTreeNode * Bittree::CreateTree() { BiTreeNode *T; char ch; ch = strTree[pos++]; if(ch=='#') T = NULL; else { T = new BiTreeNode(); T->data = ch; T->LeftChild = CreateTree(); T->RightChild = CreateTree(); } return T; } int main() { int t; cin>>t; for(int i=0;i >s1>>s2; BiTree biTree; biTree.CreateTree(s1); Bittree bittree; if(s2[s2.size()-1]!='#') s2+="##"; bittree.CreateTree(s2); biTree.InOrder(); biTree.PreOrder(); bittree.InOrder(); bittree.PreOrder(); if(biTree.preTree==bittree.preTree&&biTree.inTree==bittree.inTree) cout<<"YES"<



