用括号法递归建立二叉树
2016-03-25 22:24
519 查看
[align=left]描述[/align]
如果用大写字母标识二叉树节点,则一棵二叉树可以用以下字母序列建立,#表示空节点。试写一个递归算法,有这种形式的字符序列,建立相应的二叉树的二叉链表存储结构,并按层次遍历输出。如一棵二叉树可表示为:A(B(#,D),C(E(#,F),#))
[align=left]输入[/align]
按题中要求,用括号法输入二叉树序列,#表示空节点
[align=left]输出[/align]
按层次遍历建立好的二叉树并输出
[align=left]输入样例[/align]
A(B(#,D),C(E(#,F),#))
[align=left]输出样例[/align]
ABCDEF
如果用大写字母标识二叉树节点,则一棵二叉树可以用以下字母序列建立,#表示空节点。试写一个递归算法,有这种形式的字符序列,建立相应的二叉树的二叉链表存储结构,并按层次遍历输出。如一棵二叉树可表示为:A(B(#,D),C(E(#,F),#))
[align=left]输入[/align]
按题中要求,用括号法输入二叉树序列,#表示空节点
[align=left]输出[/align]
按层次遍历建立好的二叉树并输出
[align=left]输入样例[/align]
A(B(#,D),C(E(#,F),#))
[align=left]输出样例[/align]
ABCDEF
#include <iostream> #include <cstdio> #include <stdlib.h> #include <string.h> #include <algorithm> #include <queue> using namespace std; typedef struct BiTNode { char data; BiTNode *lchild; BiTNode *rchild; }BiTNode, *PBiTNode; int FindComma(char s[], int len) { int match = 0; int i; for(i = 0; i < len; i++) { if(s[i] == '(') ++match; else if(s[i] == ')') --match; if(match==0 && s[i]==',') break; } return i; } PBiTNode CreateBiTree(char s[], int len) { // if(len <= 0) // return NULL; if(s[0] == '#') return NULL; PBiTNode root = (PBiTNode)malloc(sizeof(BiTNode)); root->data = s[0]; if(len == 1) { root->lchild = NULL; root->rchild = NULL; } else { int commaPos = FindComma(s+2, len-2); root->lchild = CreateBiTree(s+2, commaPos); root->rchild = CreateBiTree(s+2+commaPos+1,len-3-commaPos-1); } return root; } void PostOrderTraverse(PBiTNode root) { if(root) { printf("%c", root->data); PostOrderTraverse(root->lchild); PostOrderTraverse(root->rchild); } } void LevelOrderTraverse(PBiTNode root) { deque<PBiTNode>q; q.push_back(root); while(!q.empty()) { PBiTNode temp = q.front(); q.pop_front(); cout << temp->data; if(temp->lchild) q.push_back(temp->lchild); if(temp->rchild) q.push_back(temp->rchild); } cout << endl; } int main() { char str[200]; cin >> str; PBiTNode T = (PBiTNode)malloc(sizeof(BiTNode)); T = CreateBiTree(str, strlen(str)); LevelOrderTraverse(T); return 0; }
相关文章推荐
- UWP开发入门(十)——通过继承来扩展ListView
- django-模型超级总结
- C++精进篇(二)之―指针和引用
- hdu 2609 how many
- 条款1:理解模板类型推断
- 3月25日作业重点及点评
- 网易和腾讯在线笔试
- 腾讯2016春招实习生(软件开发)笔试模拟卷
- zabbix监控入门初步
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 关于struts2中传入中文参数然后显示到页面出现乱码
- 图论:关于二分图的总结(转载)
- 畅通工程
- PLM(Product Lifecycle Management)System
- Executor框架
- Java——URLEncoder和URLDecoder
- C语言库函数一
- CSS字体
- CAS解决单点登录SSO
- php用正则判断是否为数字的方法