由树的前序遍历,中序遍历建立一颗二叉树,并以后续遍历的方式输出其元素
2013-08-19 17:09
453 查看
/*==================== 由先序遍历,中序遍历建立一颗二叉树 由中序遍历,后序遍历建立一颗二叉树 由先序遍历,中序遍历求后序遍历的结果 由中序遍历,后序遍历求中序遍历的结果 建立一颗二叉排序树 2013-08-15 By Mei ======================*/ #include <iostream> #include <stack> #include <queue> using namespace std; typedef struct Binode { char data; struct Binode *lchild, *rchild; }Binode, *Bitree; Bitree Create(char *pre, char *in, int length) { int flag; if(length<=0) return NULL; Bitree node = new Binode; node->data = *pre; for(flag=0; flag<length; ++flag) { if(*pre == in[flag]) break; } node->lchild = Create(pre+1, in, flag); node->rchild = Create(pre+1+flag, in+flag+1,length-flag-1); cout<<node->data<<" "; return node; } Bitree Insert(Bitree root, char value) { Bitree p = root; Bitree pre; Bitree node = new Binode; node->data = value; while(p!=NULL) { pre = p; if(value < p->data) p = p->lchild; else p = p->rchild; } if(value < pre->data) pre->lchild = node ; else pre->rchild = node ; node->rchild = node->lchild = NULL; return root; } Bitree Create_Sort(char *p, int n) { Bitree root = new Binode; int flag = 0; root->data = p[flag++]; root->rchild = root->lchild = NULL; for(int i=1; i<n; ++i) Insert(root, *(p+i)); return root; } void Intraverse(Bitree root) { stack<Bitree> st; Bitree p = root; while(p!=NULL||!st.empty()) { while(p!=NULL) { st.push(p); p = p->lchild; } if(!st.empty()) { p = st.top(); st.pop(); cout << p->data <<" "; p = p->rchild; } } } //层次遍历 void TraverseofLevel(Bitree root) { queue<Bitree > st; Bitree p = root; st.push(root); while(!st.empty()) { p = st.front(); st.pop(); cout<<p->data<<" "; if(p->lchild!=NULL) st.push(p->lchild); if(p->rchild!=NULL) st.push(p->rchild); } } int main() { Bitree p; char pre[] ={'G','D', 'A','F','E' ,'M' ,'H' ,'Z'}; char in[] = {'A','D','E','F', 'G', 'H', 'M', 'Z'}; int len = sizeof(pre)/sizeof(char); Create(pre, in, len); cout<<endl; p = Create_Sort(pre, len); Intraverse(p); cout<<endl; TraverseofLevel(p); }
相关文章推荐
- 二叉树先序遍历中序遍历结果得出该树,并以后序遍历形式输出
- 构造一颗二叉树,输出其先序遍历,后序遍历,中序遍历
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- C++编程练习(8)----“二叉树的建立以及二叉树的三种遍历方式“(前序遍历、中序遍历、后续遍历)
- 关于二叉树的前序遍历、中序遍历、删除元素、插入元素
- 给定二叉树的前序遍历结果,输出所有可能的中序遍历的结果
- 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历
- 二叉树的建立(先序输入)与遍历输出模板
- 算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现
- 二叉树的建立以及前序遍历、中序遍历、后序遍历
- 数据结构与算法——二叉树的前序遍历,中序遍历,后序遍历
- 给定二叉树的前序和中序,判断是否可以构成一颗二叉树,如果可以输出后序
- 根据树的前序遍历与中序遍历构建二叉树
- 二叉树的基本操作,前序遍历,后续遍历,中序遍历
- Python练手之根据前序和中序&根据中序和后序重建二叉树,输出前序、中序和后序遍历结果
- 由前序和中序遍历建立二叉树并后序遍历输出二叉树
- 二叉树的建立及遍历(先序遍历、中序遍历、后续遍历、层次遍历)
- 建一棵二叉树,能够输入树的各个结点,并能够输出用不同方法遍历的遍历序列;分别建立二叉树存储结构的的输入函数、输出层序遍历序列的函数、输出先序遍历序列的函数
- 【数据结构作业四】以二叉链表作存储结构,建立一棵二叉树,并输出该二叉树的先序、中序、后序遍历序列、高度和其叶子结点数。
- 二叉树 前序遍历的非递归实现 中序遍历的非递归实现 后序遍历的非递归实现 创建二叉树