扩展二叉树

扩展二叉树

一、心得

二、题目及分析

给定扩展二叉树的先序序列,求二叉树的中序和后序序列

输入ABD..EF..G..C..输出dbfegacdfgebca

三、代码及结果

 1 //扩展二叉树
 2 #include <iostream>
 3 #include <string>
 4 using namespace std;
 5
 6 string s="ABD..EF..G..C..";
 7 int m=-1;
 8
 9 typedef struct node{
10     char data;
11     node *lchild,*rchild;
12 }*tree;
13
14
15 void creatTree(tree &bt){
16     if(s[++m]!=‘.‘&&m<s.length()){
17         bt=new node;
18         bt->data=s[m];
19         cout<<bt->data<<" "<<m<<" ";
20         creatTree(bt->lchild);
21         creatTree(bt->rchild);
22     }
23     else bt=NULL;
24
25 }
26 //先序遍历
27 void printxx(tree bt){
28     if(bt){
29         cout<<bt->data<<" ";
30         printxx(bt->lchild);
31         printxx(bt->rchild);
32     }
33 }
34
35 //中序遍历
36 void printzx(tree bt){
37     if(bt){
38         printzx(bt->lchild);
39         cout<<bt->data<<" ";
40         printzx(bt->rchild);
41     }
42 }
43
44 //后序遍历
45 void printhx(tree bt){
46     if(bt){
47         printhx(bt->lchild);
48         printhx(bt->rchild);
49         cout<<bt->data<<" ";
50     }
51 }
52
53 int main(){
54     tree treeHead;
55     creatTree(treeHead);
56     cout<<endl;
57     printxx(treeHead);
58     cout<<endl;
59     printzx(treeHead);
60     cout<<endl;
61     printhx(treeHead);
62     return 0;
63 } 

时间: 2024-10-24 02:29:07

扩展二叉树的相关文章

【例3-5】扩展二叉树

[例3-5]扩展二叉树 链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1340时间限制: 1000 ms         内存限制: 65536 KB [题目描述] 由于先序.中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示.我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树. 现给出扩展二叉树的先序序列,要求输出其中序和后序序列. [输入

树(二叉树)的建立和遍历算法(一)(前序,中序,后序)

最近学习树的概念,有关二叉树的实现算法记录下来... 不过学习之前要了解的预备知识:树的概念:二叉树的存储结构:二叉树的遍历方法.. 二叉树的存储结构主要了解二叉链表结构,也就是一个数据域,两个指针域,(分别为指向左右孩子的指针),从下面程序1,二叉树的存储结构可以看出. 二叉树的遍历方法:主要有前序遍历,中序遍历,后序遍历,层序遍历.(层序遍历下一篇再讲,本篇主要讲的递归法) 如这样一个二叉树: 它的前序遍历顺序为:ABDGHCEIF(规则是先是根结点,再前序遍历左子树,再前序遍历右子树) 它

Java数据结构-二叉树及其遍历

二叉树的定义:n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互相不相交的.分别称为根结点的左子树和右子树的二叉树组成. 二叉树的特点: 0<=度<=2: 左右子树是有顺序的,不能颠倒: 不论有几棵子树,也要区分它是左子树还是右子树. 二叉树的五种基本形态: 空二叉树: 只有一个根结点: 根结点只有左子树: 根结点只有右子树: 根结点既有左子树又有右子树. 举例3个结点的二叉树的形态有: 下面说一些特殊的二叉树. 斜树:所有的结点都只有左子树的二叉

递归建立二叉树

转载:递归建立二叉树 假设二叉树为: a b                 c d                 e 因为程序中要知道叶子结点(终点),所以要将上面的二叉树变成扩展二叉树 (把叶子结点的孩子补成#, 用作标记),  扩展后就变成了: a b                    c #        d          #       e #    #             #    # 那么,在输入的时候,需要输入: ab#d##C#e##      (注意,输入后,按

二叉树的建立与先序,后序,中序输出

如果二叉树为: a b                                 c d                                 e 由于程序中要知道叶子结点(终点).所以要讲上面的二叉树变成扩展二叉树(把叶子结点的孩子补成#,用作标记),扩展后就变成了: a b                                 c #                  d              #                e #             #

12.遍历二叉树与二叉树的建立

一.遍历二叉树 1.定义 二叉树的遍历(travering binary tree)是指从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 2.前序遍历 (1)规则:若二叉树为空,则空操作返回.否则,先访问根结点,然后前序遍历左子树,再前序遍历右子树. (2)实例 前序遍历结果为:A BDGH CEIF 分析:当最先访问根结点后,然后前序遍历左子树.当访问根的左子树时,这里"前序遍历"即我们将B假设为左子树的根来遍历. (3)算法 从二叉树定义

C++ 二叉树遍历实现

原文:http://blog.csdn.net/nuaazdh/article/details/7032226 //二叉树遍历 //作者:nuaazdh //时间:2011年12月1日 #include<stdio.h> #include<stdlib.h> //二叉树结点结构 typedef struct BiTNode{ char ch;            //结点数据 struct BiTNode *lchild;        //左孩子 struct BiTNode 

数据结构与算法-树-二叉树与郝夫曼树

二叉树的遍历 二叉树的遍历指的是从根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次且仅被访问一次. 二叉树的遍历方法: 前序遍历:规则是若二叉树为空,则空操作返回,否则先访问根结点,然后前序遍历左子树,再前序遍历右子树. 1 void PreOrderTraverse(BiTree T) 2 { 3 if(T == NULL) 4 return; 5 printf("%c",T->data);/*显示结点数据,可以更改为其他对结点操作*/ 6 PreOr

二叉树内部顶点与外部顶点在数量上的关系

分析一些树的算法时,我们常常需要以给定的二叉树的顶点数n(T) 来度量问题实例的规模.而这个顶点数n(T) 指的就是树的扩展形式中所有顶点的个数,这些顶点分两类,一类是外部顶点,一类就是内部顶点.根据定义,一颗扩展的空二叉树是一个单独的外部顶点. 为了确定一些算法(递归的求树的高度,递归的前序.中序.后续遍历,求叶节点数等等)的效率,我们需要知道一颗包含n 个内部顶点的扩展二叉树最多能够具有几个外部顶点.考察几个例子后,我们容易做出这种假设:外部顶点的数量x 比内部顶点的数量大一,即 x = n