建立二叉树的二叉链表
2016-03-25 22:26
309 查看
[align=left]描述[/align]
已知二叉树的中序序列和前序序列存放在两个一维数组中,尝试建立二叉树的二叉链表。检查是否建立成功的方法是输出该二叉树的后序序列。
[align=left]输入[/align]
分别输入二叉树的中序序列和前序序列
[align=left]输出[/align]
输出二叉树的后序序列
[align=left]输入样例[/align]
ABCDEGF
CBEGDFA
[align=left]输出样例[/align]
C
G
E
F
D
B
A
已知二叉树的中序序列和前序序列存放在两个一维数组中,尝试建立二叉树的二叉链表。检查是否建立成功的方法是输出该二叉树的后序序列。
[align=left]输入[/align]
分别输入二叉树的中序序列和前序序列
[align=left]输出[/align]
输出二叉树的后序序列
[align=left]输入样例[/align]
ABCDEGF
CBEGDFA
[align=left]输出样例[/align]
C
G
E
F
D
B
A
#include <iostream> #include <cstring> #include <stdlib.h> using namespace std; typedef struct TreeNode { struct TreeNode* lchild; struct TreeNode* rchild; char elem; }TreeNode; TreeNode* BinaryTree(char *preorder, char *inorder, int len) { if(len <= 0) return NULL; TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode)); root->elem = preorder[0]; int rootindex = -1; for(int i = 0; i < len; i ++) { if(inorder[i] == preorder[0]) { rootindex = i; break; } } //cout << root->elem << endl; root->lchild = BinaryTree(preorder+1,inorder, rootindex); root->rchild = BinaryTree(preorder+rootindex+1,inorder+rootindex+1,len-rootindex-1); return root; } void Traversal(TreeNode *root) { if(root != NULL) { Traversal(root->lchild); Traversal(root->rchild); cout << root->elem << endl; } } int main() { char inorder[100]; char preorder[100]; cin >> preorder; cin >> inorder; int len = strlen(preorder); TreeNode * root = BinaryTree(preorder, inorder, len); Traversal(root); return 0; }
相关文章推荐
- 反向代理的几个应用场景
- 整数数组中最大子数组求和01
- 《夜曲》
- 用括号法递归建立二叉树
- UWP开发入门(十)——通过继承来扩展ListView
- django-模型超级总结
- C++精进篇(二)之―指针和引用
- hdu 2609 how many
- 条款1:理解模板类型推断
- 3月25日作业重点及点评
- 网易和腾讯在线笔试
- 腾讯2016春招实习生(软件开发)笔试模拟卷
- zabbix监控入门初步
- Java中普通代码块,构造代码块,静态代码块区别及代码示例
- 关于struts2中传入中文参数然后显示到页面出现乱码
- 图论:关于二分图的总结(转载)
- 畅通工程
- PLM(Product Lifecycle Management)System
- Executor框架
- Java——URLEncoder和URLDecoder