由遍历序列构造二叉树
来源:互联网 发布:博优化纤 编辑:程序博客网 时间:2024/05/21 09:19
- 根据前序中序确定二叉树
- 根据后序中序确定二叉树
- 根据层次中序确定二叉树
注意,根据前序和后序无法确定一棵二叉树
#include <iostream>#include <stack>#include <queue>#include <string>#include <cstdlib>#include <fstream>using namespace std;#define ElemType chartypedef struct treeNode { struct treeNode * lchild; struct treeNode * rchild; ElemType data;}treeNode,* tree;//递归前中后序void preOrder(tree & t) { if (t) { std::cout << t->data; preOrder(t->lchild); preOrder(t->rchild); }}void inOrder(tree & t) { if (t) { inOrder(t->lchild); std::cout << t->data; inOrder(t->rchild); }}void postOrder(tree & t) { if (t) { postOrder(t->lchild); postOrder(t->rchild); std::cout << t->data; }}void levelOrder(tree & t) { queue<tree> q; if (t) { q.push(t); while (!q.empty()) { tree temp = q.front(); cout << temp->data ; q.pop(); if (temp->lchild) q.push(temp->lchild); if (temp->rchild) q.push(temp->rchild); } }}//根据先序中序建立树void preInCreate(string pre_str, string in_str, tree & t) { if (!pre_str.empty()&&!in_str.empty()) { //数组内还有结点时,申请空间构造结点 t = (treeNode *)malloc(sizeof(treeNode)); t->data = pre_str[0]; int pos = in_str.find(pre_str[0]); string lpstr = pre_str.substr(1, pos); string rpstr = pre_str.substr(pos + 1, pre_str.length() - 1 - pos); string listr = in_str.substr(0, pos); string ristr = in_str.substr(pos + 1, in_str.length() - 1 - pos); preInCreate(lpstr, listr, t->lchild); preInCreate(rpstr, ristr, t->rchild); } else t = NULL;}//根据后序中序建立树void postInCreate(string in_str, string post_str, tree & t) { if (!in_str.empty() && !post_str.empty()) { t = (treeNode*)malloc(sizeof(treeNode)); t->data = post_str[post_str.length() - 1]; int pos = in_str.find(post_str[post_str.length() - 1]); string listr = in_str.substr(0, pos); string ristr = in_str.substr(pos + 1, in_str.length() - 1 - pos); string lpstr = post_str.substr(0, pos); string rpstr = post_str.substr(pos, in_str.length() - 1 - pos); postInCreate(listr, lpstr, t->lchild); postInCreate(ristr, rpstr, t->rchild); } else t = NULL;}int main() { string pre_str; string in_str; string post_str; tree t; //std::cin >> pre_str >> in_str; //preInCreate(pre_str, in_str, t); postInCreate(in_str, post_str, t); preOrder(t); cout << endl; //preInCreate(pre_str, in_str, t); postInCreate(in_str, post_str, t); inOrder(t); cout << endl; //preInCreate(pre_str, in_str, t); postInCreate(in_str, post_str, t); postOrder(t); cout << endl; //preInCreate(pre_str, in_str, t); postInCreate(in_str, post_str, t); levelOrder(t); cout << endl; system("PAUSE"); return EXIT_SUCCESS;}
阅读全文
0 0
- 由遍历序列构造二叉树
- 由遍历序列构造二叉树
- 由遍历序列构造二叉树
- 由遍历序列构造二叉树
- 上机作业之树:二叉树遍历算法、由遍历序列构造二叉树算法
- 由中序遍历序列和后序遍历序列构造二叉树(递归实现)
- 由遍历序列得到二叉树
- 由遍历序列还原二叉树结构
- 由初始序列构造二叉搜索树,输出层次遍历,并判断是否是完全二叉树
- 由二叉树的遍历序列恢复二叉树
- 由二叉树的前序遍历序列和中序遍历序列求后序遍历序列
- 由已知的层次遍历序列构建二叉树
- 由先序遍历和中序遍历构造二叉树的二叉链表代码
- 由二叉树的两个遍历序列求另一个遍历序列
- 由前序遍历序列和中序遍历序列重建二叉树
- 由中序遍历序列和后续遍历序列恢复二叉树
- 由先序序列/后序序列和中序序列构造二叉树
- 根据中序和层次遍历序列,构造二叉树
- 识更加强大的滚动控件——RecyclerView
- 流形上的预积分
- spi
- Jenkins 钉钉 机器人 Python版本
- Windows Practice(八)_MFC
- 由遍历序列构造二叉树
- leetcode练习 Beautiful Arrangement
- 假装是第一篇博文
- 一次完整的HTTP请求
- 批处理
- 袁萌为何鸣冤叫屈?
- android-studio开发工具的安装及配置
- java学习初探九之StringBuffer、StringBuilder
- information theory——熵