根据前序和中序序列生成二叉树

霞彦钊海

霞彦钊海

2016-01-29 12:15

根据前序和中序序列生成二叉树,根据前序和中序序列生成二叉树

根据前序和中序序列生成二叉树
作者:宋科
作者主页:kesongemini.diy.163.com

(本文来源于图老师网站,更多请访问http://m.tulaoshi.com/cyuyanjiaocheng/) 下载本文示例代码

一、前言:
我的一个同事拿来她老公的远程教育的考试题,叫大家帮着做,我写了这道,源码通过VC6编译链接,执行成功,呵呵;)题目就是给出了一个二叉树的前序序列(ABDCEGF)和中序序列(DBAEGCF),要求根据这两个输入完成一个二叉树,但没有指定用什么方式,所以我用了最笨拙的顺序存储二叉树,不过用了map来保存二叉树。题目还要求形成二叉树后可以遍历这个二叉树,由于三种遍历只是顺序不同,所以我只实现了后序遍历,何况输入就是前序和中序。;)本来应该用template做的,不过同事要求不要用复杂的C++语法,以免姐夫难以应对老师的提问,所以我只用了string来保存数据。本人是数学系毕业的,数据结构当时开课只学了几章,所以请朋友们不要笑话我。: 我想这个程序唯一能够对您有帮助的地方就是提醒您不要将递归的函数做成inline的,希望大家干活儿的时候多注意这点儿。非常渴望朋友们和我联系email,批评我,让我进步,谢谢。:

二、代码实现:
// BTree3.cpp : Defines the entry point for the console application.//// AUTHOR:  Song Ke// EMAIL: kesongemini@vip.163.com// HOMEPAGE: http://kesongemini.diy.163.com// QQ: 123588179// COMPANY: www.etonglian.com// AIM: programmed by SongKe 2002/12/16 night at home //for Sister An Ning''s her husband''s exam-3://known as preorder(ABDCEGF) and inorder(DBAEGCF) sequence//to request for the btree and postorder sequence// STATUS: finished!// METHOD: the binary tree SongKe_BinaryTree with ordinal saving// TEST: succeeded by compile and link// PLATFORM: VC++6.0 + sp5 //MS-STL NOT SGI-STL!//at Windows2000 + sp3 // NOTE: DON''T WRITE THE RECURSION FUNCTION AS INLINE FUNCTION!#include "stdafx.h"#include <vector>#include <string>#include <iostream>#include <utility>#include <map>#include <algorithm>using namespace std;class SongKe_BinaryTree{public:SongKe_BinaryTree() : _i_generate(0) {}~SongKe_BinaryTree() {}void pre_insert(const string& s) { _pre.push_back(s); }void in_insert(const string& s) { _in.push_back(s); }void pre_out(){ _out("PREORDER : ", _pre); }void in_out(){ _out("INORDER : ", _in); }void post_out();// generate the binary treevoid generate();private:// get left or right subtree for iterationvoid _get_subtree(int iNode, vector< pair<string, int> >& v);void _get_subtree(bool bLeft, int iNode, vector< pair<string, int> >& v);void _postorder_iterate(const vector< pair<string, int> >& v);// postorder iteratevoid _inorder_iterate(const vector< pair<string, int> >& v);// using postorder iteratevoid _preorder_iterate(const vector< pair<string, int> >& v);// using postorder iterateint _i_generate; // point to current element of preorder// mark the elements in inorders, and recurse the func in.// bLeft == true or false is rightvoid _kesongemini(bool bLeft, int iNode, const vector<string>& v);void _kesongemini(const string& node, int jj, bool bLeft, int iNode, const vector<string>& v);// print outvoid _out(const string& explain, const vector<string>& vec);vector<string> _pre; // preorder sequence as knownvector<string> _in; // inorder sequence as knownvector<string> _post; // postorder sequence as requestvector< pair<string, int> > _s; // string, position as ordinal savingmap<int, string> _sm; // assistant for making subtree when postorder iteratevector<int> _si; // assistant for making subtree when postorder iterate};void SongKe_BinaryTree::_out(const string& explain, const vector<string>& vec){cout << explain << "t";for(vector<string>::const_iterator i = vec.begin(); i != vec.end(); ++i){cout << *i << " ";}cout << endl;}void SongKe_BinaryTr      
展开更多 50%)
分享

猜你喜欢

根据前序和中序序列生成二叉树

C语言教程 C语言函数
根据前序和中序序列生成二叉树

创建二叉树 二叉树如何删除节点操作教程

编程语言 网络编程
创建二叉树 二叉树如何删除节点操作教程

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

简单二叉树类

C语言教程 C语言函数
简单二叉树类

二叉树实现源代码

编程语言 网络编程
二叉树实现源代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

二叉树的几种运算方法

编程语言 网络编程
二叉树的几种运算方法

c++二叉树的几种遍历算法

编程语言 网络编程
c++二叉树的几种遍历算法

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Jsp结合XML+XSLT将输出转换为Html格式

Jsp结合XML+XSLT将输出转换为Html格式

一个最基本的有限元计算程序

一个最基本的有限元计算程序
下拉加载更多内容 ↓