文本二叉树
来源:互联网 发布:虚拟设计软件 编辑:程序博客网 时间:2024/06/03 21:02
/*3:文本二叉树查看 提交 统计 提问总时间限制: 1000ms 内存限制: 65536kB描述如上图,一棵每个节点都是一个字母,且字母互不相同的二叉树,可以用以下若干行文本表示:A-B--*--C-D--E---*---F在这若干行文本中:1) 每个字母代表一个节点。该字母在文本中是第几行,就称该节点的行号是几。根在第1行2) 每个字母左边的'-'字符的个数代表该结点在树中的层次(树根位于第0层)3) 若某第 i 层的非根节点在文本中位于第n行,则其父节点必然是第 i-1 层的节点中,行号小于n,且行号与n的差最小的那个4) 若某文本中位于第n行的节点(层次是i) 有两个子节点,则第n+1行就是其左子节点,右子节点是n+1行以下第一个层次为i+1的节点5) 若某第 i 层的节点在文本中位于第n行,且其没有左子节点而有右子节点, 那么它的下一行就是 i+1个'-' 字符再加上一个 '*' 给出一棵树的文本表示法,要求输出该数的前序、后序、中序遍历结果输入第一行是树的数目 n接下来是n棵树,每棵树以'0'结尾。'0'不是树的一部分每棵树不超过100个节点输出对每棵树,分三行先后输出其前序、后序、中序遍历结果两棵树之间以空行分隔样例输入2A-B--*--C-D--E---*---F0A-B-C0样例输出ABCDEFCBFEDABCAEFDABCBCABAC*/include<iostream>#include<algorithm>#include<string>#include<stack>using namespace std;struct Node{char c;Node *leftChild, *rightChild;int len;int d; //记录左右节点,0为左节点,1为右节点};Node* BuildTree(){string s;int len,top = 1;stack<Node*> Stack;cin >> s;Node *root = new Node;root->c = s[0];root->leftChild = NULL;root->rightChild = NULL;root->len = 0;root->d = 0;Stack.push(root);while (cin >> s){if (s == "0")break;len = s.length();Node *new_Node = new Node;new_Node->c = s[len - 1];new_Node->leftChild = NULL;new_Node->rightChild = NULL;new_Node->len = len-1;new_Node->d = 0;Node *r = Stack.top();while (new_Node->len - r->len != 1){Stack.pop();r = Stack.top();}if (new_Node->c == '*'){r->d++;continue;}if (r->d == 0){r->leftChild = new_Node;r->d++;}else if (r->d == 1){r->rightChild = new_Node;r->d++;}if (r->d == 2)Stack.pop();Stack.push(new_Node);}return root;}void PreOrder(Node *root){if (root){cout << root->c;PreOrder(root->leftChild);PreOrder(root->rightChild);}}void InOrder(Node *root){if (root){InOrder(root->leftChild);cout << root->c;InOrder(root->rightChild);}}void PostOrder(Node *root){if (root){PostOrder(root->leftChild);PostOrder(root->rightChild);cout << root->c;}}int main(){int t;cin >> t;for (int i = 0; i < t; ++i){Node *root = BuildTree();PreOrder(root);cout << endl;PostOrder(root);cout << endl;InOrder(root);cout << endl;cout << endl;}return 0;}
0 0
- openjudge 文本二叉树
- 文本二叉树
- 文本二叉树
- 文本二叉树
- 3720:文本二叉树
- 【Openjudge】文本二叉树
- 二叉树的文本模式输出
- 文本二叉树折半查询及其截取值
- 问题 M: 二叉查找树(Ⅱ)-文本显示
- 二叉树基础-文本二叉树(数据结构基础 第5周)
- 利用二叉搜索树来实现输入文本的单词统计
- 基于二叉树和链表结构的文本重复序列去重算法
- 二叉树、二叉堆
- 文本树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 解决 百度地图+slidingmenu 切换Fragment闪黑屏问题
- hdu1754I Hate It(线段树)
- java 嵌入式的Web服务器jetty使用例子
- 缓冲区溢出分析第07课:MS06-040漏洞研究——静态分析
- POJ-3468-线段树-A Simple Problem with Integers
- 文本二叉树
- 挂载和卸载u盘(centos)
- 关于女人强势表现和强势心理
- Spring注解详解
- 缓冲区溢出分析第08课:MS06-040漏洞研究——动态调试
- java加密技术比较好的博客地址
- 求1+2!+3!+...+20!的和
- 物理学家:用数学理论证明人工智能无法超越人类智慧
- 缓冲区溢出分析第09课:MS06-040漏洞研究——深入挖掘