数组二叉树的遍历(用VB编写 二叉树的建立与遍历、二叉树的排序)

2024-05-22 13:26:37 1

数组二叉树的遍历(用VB编写 二叉树的建立与遍历、二叉树的排序)

本文目录

  • 用VB编写 二叉树的建立与遍历、二叉树的排序
  • 一颗具有N个结点的完全二叉树以一维数组作为存储结构,试设计一个对该完全二叉树进行线序遍历的算法
  • 完全二叉树 顺序储存 实现对其的先序遍历
  • 一棵具有n个结点的完全二叉树以数组存储,试写一个非递归算法实现对该树的前序遍历
  • 递归算法如何把二叉排序树遍历序列放入数组里面
  • 在二叉树中有两个结点m和n,如果m是n的祖先,可以找到从m到n的路径的遍历方式是
  • C语言的二叉树中序遍历问题

用VB编写 二叉树的建立与遍历、二叉树的排序

实验四 二叉树的建立和遍历一、实验名称 二叉树的建立和遍历。二、实验目的掌握二叉树的二叉链表存储结构及二叉树的建立方法。熟悉二叉树的遍历方法。三、实验内容(1)根据先序遍历和中序遍历的序列,建立一棵二叉树(二叉树用二叉链表存储)。(2)分别以先序和中序遍历二叉树,将假设结果与给定的先序和中序遍历序列进行比较,以证明建立二叉树的正确性。(3)给出后序遍历序列。四、实验步骤(1)编写一个过程,将给出的遍历序列读入一个数组;(2)编写一个过程,根据先序和中序遍历的序列建立一棵二叉树;(3)编写一个过程,进行先序遍历,并将结果存入一个数组。(4)编写一个过程,进行中序遍历,并将结果存入一个数组。(5) 编写一个函数,用以证明建立的二叉树的正确性。(6)编写一个过程,进行后序遍历,打印后序遍历结果(前面函数为真时);(7)调试程序:先序遍历序列为:ABDECF;中序遍历序列为:DBEACF;(8)将实验心得写在程序后面,作为实验报告进行文档备份。五、实验数据处理将原程序和实验结果存入计算机室服务器或软盘后,交由指导老师或有关实验人员保存。实验五 二叉树的排序一、实验名称 二叉树的排序。二、实验目的通过该实验,进一步熟悉二叉树的建立方法,掌握二叉排序树的建立和使用。三、实验内容(1)根据中序遍历,建立一棵二叉排序树用二叉链表存储;(2)给出先序遍历和后序遍历序列。四、实验步骤(1)编写一个过程,将给定的待排序数据读入一个数组;(2)编写一个过程,建立二叉排序树;(3)编写一个函数,用中序遍历以证明二叉排序树的正确性;(4)编写一个过程,进行先序遍历,并打印遍历结果(第3步必须确保正确);(5)编写一个过程,进行后序遍历,并打印遍历结果(第3步必须确保正确);(6)调试程序; 用以下数据调试程序:(58、48、77、42、64) (7)将实验心得写在程序后面,作为实验报告进行文档备份。五、实验数据处理将原程序和实验结果存入计算机室服务器或软盘后,交由指导老师或有关实验人员保存。jiuzheyang ban

一颗具有N个结点的完全二叉树以一维数组作为存储结构,试设计一个对该完全二叉树进行线序遍历的算法

preorder (R) //先序遍历二叉树Rint R;{ int root;SqStack *s; //s为一个指针栈,类型为seqstack,其中包含top域和数组datas-》top= -1; //s栈置空root=1;while ((root《=n) && (s-》top》-1)){ while (root《=n){ printf(R); s-》top++; s-》data=root; root=2*root;} if (s-》top》-1) //栈非空访问,遍历右子树 { root=s-》data*2+1; s-》top--;}}}

完全二叉树 顺序储存 实现对其的先序遍历

假设完全二叉树的顺序储存序列是10,15,20,25,30,50,定义数组:int BTree={10,15,20,25,30,50};完全二叉树的树形如下:        10      /     \     15     20    /  \    /   25  30  50  相应的顺序号(也就是数组的下标)是:                /     \         /  \     /    =50根节点10的下标是n=0,其左节点下标是2*n+1=2*0+1=1,左节点就是=15,右节点下标是2*n+2=2*0+2=2,右节点就是=20节点15的下标是n=1,其左节点下标是2*n+1=2*1+1=3,左节点就是=25,右节点下标是2*n+2=2*1+2=4,右节点就是=30节点20的下标是n=2,其左节点下标是2*n+1=2*2+1=5,左节点就是=50,没有右节点.先序遍历就是遍历数组的下标.注:如果将根节点10的下标定为1,也就是=10,那么,其它节点的下标也相应加1.   根节点10的下标是n=1,其左节点下标是2*n=2*1=2,左节点就是=15,   右节点下标是2*n+1=2*1+1=3,右节点就是=20// 测试结果:// 输入完全二叉树的总节点数: 6// 输入6个节点的数值: 10 15 20 25 30 50// 先序遍历序列(递归法): 10 15 25 30 20 50// 先序遍历序列(非递归): 10 15 25 30 20 50#include 《stdio.h》#define MAXSIZE 100void preOrderByStack(int BT,int i,int n) //先序遍历(非递归){    int oneStack; //栈    int top=0;      //栈顶,从top=1开始存入数据    int left,right;    if(i》=n)    {        return;    }    top++;    oneStack=i; //根节点的下标入栈    while(top!=0)    {        i=oneStack; //出栈        top--;        printf("%d ",BT);        left=i*2+1;        right=i*2+2;        if(right《n)        {            top++;            oneStack=right; //右节点的下标入栈        }        if(left《n)        {            top++;            oneStack=left; //左节点的下标入栈        }    }}void preOrder(int BT,int i,int n) //先序遍历(递归法){    if(i《n)    {        printf("%d ",BT);        preOrder(BT,2*i+1,n);  //左节点        preOrder(BT,2*i+2,n);  //右节点    }}int main(){    int BTree;    int n;    int i;    printf("输入完全二叉树的总节点数: ");    scanf("%d",&n);    printf("输入%d个节点的数值: ",n);    for(i=0;i《n;i++)    {        scanf("%d",&BTree);    }    printf("先序遍历序列(递归法): ");    preOrder(BTree,0,n);    printf("\n");    printf("先序遍历序列(非递归): ");    preOrderByStack(BTree,0,n);    printf("\n");    return 0;}

一棵具有n个结点的完全二叉树以数组存储,试写一个非递归算法实现对该树的前序遍历

#include "stdafx.h"#include 《stack》#include 《iostream》using namespace std; int _tmain(int argc, _TCHAR* argv){ //构建完全二叉树,层数是三,7个节点 int a = {0,1,2,3,4,5,6}; //前序遍历,先访问左儿子,再访问自己,再访问右儿子 //左儿子的位置是自己游标*2+1,右儿子是自己的游标*2+2 //队列作为缓冲 stack《int》 Temp; Temp.push(0);//根节点 while(!Temp.empty()) { int node = Temp.top(); if(2*node+1 《6)//有左儿子 { Temp.push(2*node+1); } else { cout《《a《《endl; Temp.pop(); if(Temp.empty()) { getchar(); return 0; } int parent = Temp.top(); cout《《a《《endl; Temp.pop(); Temp.push(2*parent+2); } } getchar(); return 1;}

递归算法如何把二叉排序树遍历序列放入数组里面

创建二叉排序树,请输入结点的总数量: 7请连续输入7个结点的数据: 2 4 1 3 7 9 5先序遍历序列: 2 1 4 3 7 5 9中序遍历序列: 1 2 3 4 5 7 9后序遍历序列: 1 3 5 9 7 4 2输入要查找的结点的数值(0退出): 9该结点的层次是 4输入要查找的结点的数值(0退出): 7该结点的层次是 3 二叉树示意图: 2 / \ 1 4 / \ 3 7 / \ 5 9 #include "stdio.h"#include "stdlib.h"struct Tree{ int data; struct Tree *left; struct Tree *right;};typedef struct Tree TreeNode;typedef TreeNode *Bitree;//插入结点Bitree insertNode(Bitree root,int data){ Bitree newnode; Bitree current; Bitree back; newnode=(Bitree)malloc(sizeof(TreeNode)); if(newnode==NULL) { printf("\n动态分配内存出错.\n"); exit(1); } newnode-》data=data; newnode-》left=NULL; newnode-》right=NULL; if(root==NULL) { return newnode; } else { current=root; while(current!=NULL) { back=current; if(current-》data 》 data) { current=current-》left; } else { current=current-》right; } } if(back-》data 》 data) { back-》left=newnode; } else { back-》right=newnode; } } return root;}//创建二叉排序树(非递归)Bitree createTree(){ Bitree root=NULL; int len; int data; int i; printf("创建二叉排序树,请输入结点的总数量: "); scanf("%d",&len); printf("请连续输入%d个结点的数据: ",len); for(i=0;i《len;i++) { scanf("%d",&data); root=insertNode(root,data); } return root;}//先序遍历(递归法)void preOrder(Bitree ptr){ if(ptr!=NULL) { printf("%d ",ptr-》data); preOrder(ptr-》left); preOrder(ptr-》right); }}//中序遍历(递归法)void inOrder(Bitree ptr){ if(ptr!=NULL) { inOrder(ptr-》left); printf("%d ",ptr-》data); inOrder(ptr-》right); }}//后序遍历(递归法)void postOrder(Bitree ptr){ if(ptr!=NULL) { postOrder(ptr-》left); postOrder(ptr-》right); printf("%d ",ptr-》data); }}//计算结点的层次(非递归)int findLevel(Bitree root,int data){ Bitree current; int nLevel; if(root==NULL) { return -1; } else { current=root; nLevel=0; while(current!=NULL) { nLevel++; if(current-》data 》 data) { current=current-》left; } else if(current-》data 《 data) { current=current-》right; } else { return nLevel; } } } return 0;} int main(){ Bitree root=NULL; int data; int nLevel; root=createTree(); //创建二叉排序树 printf("先序遍历序列: "); preOrder(root); printf("\n"); printf("中序遍历序列: "); inOrder(root); printf("\n"); printf("后序遍历序列: "); postOrder(root); printf("\n"); while(1) { printf("输入要查找的结点的数值(0退出): "); scanf("%d",&data); if(data==0) { break; } //计算结点的层次(非递归) nLevel=findLevel(root,data); if(nLevel == -1) { printf("二叉树没有数据.\n"); } else if(nLevel == 0) { printf("二叉树没有该数据.\n"); } else { printf("该结点的层次是 %d\n",nLevel); } } printf("\n"); return 0;}

在二叉树中有两个结点m和n,如果m是n的祖先,可以找到从m到n的路径的遍历方式是

四、遍历二叉树二叉树是一种非线性的数据结构,在对它进行操作时,总是需要逐一对每个数据元素实施操作,这样就存在一个操作顺序问题,由此提出了二叉树的遍历操作。所谓遍历二叉树就是按某种顺序访问二叉树中的每个结点一次且仅一次的过程。这里的访问可以是输出、比较、更新、查看元素内容等等各种操作。二叉树的遍历方式分为两大类:一类按根、左子树和右子树三个部分进行访问;另一类按层次访问。下面我们将分别进行讨论。1、按根、左子树和右子树三部分进行遍历遍历二叉树的顺序存在下面6种可能:TLR(根左右),TRL(根右左)LTR(左根右),RTL(右根左)LRT(左右根),RLT(右左根)其中,TRL、RTL和RLT三种顺序在左右子树之间均是先右子树后左子树,这与人们先左后右的习惯不同,因此,往往不予采用。余下的三种顺序TLR、LTR和LRT根据根访问的位置不同分别被称为先序遍历、中序遍历和后序遍历。(1)先序遍历若二叉树为空,则结束遍历操作;否则访问根结点;先序遍历左子树;先序遍历右子树。(2)中序遍历若二叉树为空,则结束遍历操作;否则中序遍历左子树;访问根结点;中序遍历右子树。(3)后序遍历若二叉树为空,则结束遍历操作;否则后序遍历左子树;后序遍历右子树;访问根结点。例如。以下是一棵二叉树及其经过三种遍历所得到的相应遍历序列二叉树的两种遍历方法:(1)对一棵二叉树中序遍历时,若我们将二叉树严格地按左子树的所有结点位于根结点的左侧,右子树的所有结点位于根右侧的形式绘制,就可以对每个结点做一条垂线,映射到下面的水平线上,由此得到的顺序就是该二叉树的中序遍历序列(2)任何一棵二叉树都可以将它的外部轮廓用一条线绘制出来,我们将它称为二叉树的包线,这条包线对于理解二叉树的遍历过程很有用。由此可以看出:(1)遍历操作实际上是将非线性结构线性化的过程,其结果为线性序列,并根据采用的遍历顺序分别称为先序序列、中序序列或后序序列;(2)遍历操作是一个递归的过程,因此,这三种遍历操作的算法可以用递归函数实现。(1)先序遍历递归算法voidPreOrder(BTreeBT){if(BT){Visit(BT);PreOrder(BT-》Lchild);PreOrder(BT-》Rchild);}(2)中序遍历递归算法voidInOrder(BTreeBT){if(BT){InOrder(BT-》Lchild);Visit(BT);InOrder(BT-》Rchild);}}(3)后序遍历递归算法voidPostOrder(BTreeBT){if(BT){PostOrder(BT-》Lchild);PostOrder(BT-》Rchild);Visit(BT);}}2、按层次遍历二叉树实现方法为从上层到下层,每层中从左侧到右侧依次访问每个结点。下面我们将给出一棵二叉树及其按层次顺序访问其中每个结点的遍历序列。voidLevelOreder(QBTreeBT){for(i=1;iLchild){Visite(p-》Lchild);EnQueue(&Q,p-》Lchild);//处理左孩子if(!p-》Rchild){Visite(p-》Rchild);EnQueue(&Q,p-》Rchild);//处理右孩子}}五、典型二叉树的操作算法1、输入一个二叉树的先序序列,构造这棵二叉树为了保证唯一地构造出所希望的二叉树,在键入这棵树的先序序列时,需要在所有空二叉树的位置上填补一个特殊的字符,比如,’#’。在算法中,需要对每个输入的字符进行判断,如果对应的字符是’#’,则在相应的位置上构造一棵空二叉树;否则,创建一个新结点。整个算法结构以先序遍历递归算法为基础,二叉树中结点之间的指针连接是通过指针参数在递归调用返回时完成。算法:BTreePre_Create_BT(){getch(ch);if(ch==’#’)returnNULL;//构造空树else{BT=(BTree)malloc(sizeof(BTLinklist));//构造新结点BT-》data=ch;BT-》lchild=Pre_Create_BT();//构造左子树BT-》rchild=Pre_Create_BT();//构造右子树returnBT;}}2、计算一棵二叉树的叶子结点数目这个操作可以使用三种遍历顺序中的任何一种,只是需要将访问操作变成判断该结点是否为叶子结点,如果是叶子结点将累加器加1即可。下面这个算法是利用中序遍历实现的。算法:voidLeaf(BTreeBT,int*count){if(BT){Leaf(BT-》child,&count);//计算左子树的叶子结点个数if(BT-》lchild==NULL&&BT-》rchild==NULL)(*count)++;Leaf(BT-》rchild,&count);//计算右子树的叶子结点个数}}3、交换二叉树的左右子树许多操作可以利用三种遍历顺序的任何一种,只是某种遍历顺序实现起来更加方便一些。而有些操作则不然,它只能使用其中的一种或两种遍历顺序。将二叉树中所有结点的左右子树进行交换这个操作就属于这类情况。算法:voidchange_left_right(BTreeBT){if(BT){change_left_right(BT-》lchild);change_left_right(BT-》rchild);BT-》lchildBT-》rchild;}}4、求二叉树的高度这个操作使用后序遍历比较符合人们求解二叉树高度的思维方式。首先分别求出左右子树的高度,在此基础上得出该棵树的高度,即左右子树较大的高度值加1。算法:inthight(BTreeBT){//h1和h3分别是以BT为根的左右子树的高度if(BT==NULL)return0;else{h1=hight(BT-》lchild);h3=hight(BT-》right);returnmax{h1,h3}+1;}}六、树、森林与二叉树的转换1、树、森林转换成二叉树将一棵树转换成二叉树的方法:将一棵树转换成二叉树实际上就是将这棵树用孩子兄弟表示法存储即可,此时,树中的每个结点最多有两个指针:一个指针指向第一个孩子,另一个指针指向右侧第一个兄弟。当你将这两个指针看作是二叉树中的左孩子指针和孩子右指针时,就是一棵二叉树了。特点:一棵树转换成二叉树后,根结点没有右孩子。将森林转换成二叉树的方法与一棵树转换成二叉树的方法类似,只是把森林中所有树的根结点看作兄弟关系,并对其中的每棵树依依地进行转换。2、二叉树还原成树或森林这个过程实际上是树、森林转换成二叉树的逆过程,即将该二叉树看作是树或森林的孩子兄弟表示法。比如,若二叉树为空,树也为空;否则,由二叉树的根结点开始,延右指针向下走,直到为空,途经的结点个数是相应森林所含树的棵数;若某个结点的左指针非空,说明这个结点在树中必有孩子,并且从二叉树中该结点左指针所指结点开始,延右指针向下走,直到为空,途经的结点个数就是这个结点的孩子数目。第3节哈夫曼树及其应用1、哈夫曼树的定义及特点在二叉树中,一个结点到另一个结点之间的分支构成这两个结点之间的路径。这三棵二叉树的带权路径长度分别为:WPL1=10*2+11*2+3*3+6*3+7*3+9*3=117WPL2=3*1+6*2+7*3+9*4+10*5+11*5=177WPL3=9*1+7*2+6*3+3*4+10*5+11*5=158哈夫曼树的一个重要特点是:没有度为1的结点。2、构造哈夫曼树的过程:(1)将给定的n个权值{w1,w2,,wn}作为n个根结点的权值构造一个具有n棵二叉树的森林{T1,T2,,Tn},其中每棵二叉树只有一个根结点;(2)在森林中选取两棵根结点权值最小的二叉树作为左右子树构造一棵新二叉树,新二叉树的根结点权值为这两棵树根的权值之和;(3)在森林中,将上面选择的这两棵根权值最小的二叉树从森林中删除,并将刚刚新构造的二叉树加入到森林中;(4)重复上面(2)和(3),直到森林中只有一棵二叉树为止。这棵二叉树就是哈夫曼树。例如:假设有一组权值{5,29,7,8,14,23,3,11},下面我们将利用这组权值演示构造哈夫曼树的过程。它的带权的路径长度为:WPL=(23+29)*2+(11+14)*3+(3+5+7+8)*4=2713.判定树在很多问题的处理过程中,需要进行大量的条件判断,这些判断结构的设计直接影响着程序的执行效率。例如,编制一个程序,将百分制转换成五个等级输出。大家可能认为这个程序很简单,并且很快就可以用下列形式编写出来:if(socre《60)printf("bad");elseif(socre《70)printf("pass");elseif(score《80)printf("general");elseif(score《90)printf("good");esleprintf("verygood");在实际应用中,往往各个分数段的分布并不是均匀的。下面就是在一次考试中某门课程的各分数段的分布情况:4.前缀编码在电文传输中,需要将电文中出现的每个字符进行二进制编码。在设计编码时需要遵守两个原则:(1)发送方传输的二进制编码,到接收方解码后必须具有唯一性,即解码结果与发送方发送的电文完全一样;(2)发送的二进制编码尽可能地短。下面我们介绍两种编码的方式。(1)等长编码这种编码方式的特点是每个字符的编码长度相同(编码长度就是每个编码所含的二进制位数)。假设字符集只含有4个字符A,B,C,D,用二进制两位表示的编码分别为00,01,10,11。若现在有一段电文为:ABACCDA,则应发送二进制序列:00010010101100,总长度为14位。当接收方接收到这段电文后,将按两位一段进行译码。这种编码的特点是译码简单且具有唯一性,但编码长度并不是最短的。(2)不等长编码在传送电文时,为了使其二进制位数尽可能地少,可以将每个字符的编码设计为不等长的,使用频度较高的字符分配一个相对比较短的编码,使用频度较低的字符分配一个比较长的编码。例如,可以为A,B,C,D四个字符分别分配0,00,1,01,并可将上述电文用二进制序列:000011010发送,其长度只有9个二进制位,但随之带来了一个问题,接收方接到这段电文后无法进行译码,因为无法断定前面4个0是4个A,1个B、2个A,还是2个B,即译码不唯一,因此这种编码方法不可使用。(1)利用字符集中每个字符的使用频率作为权值构造一个哈夫曼树;(2)从根结点开始,为到每个叶子结点路径上的左分支赋予0,右分支赋予1,并从根到叶子方向形成该叶子结点的编码。假设有一个电文字符集中有8个字符,每个字符的使用频率分别为{0.05,0.29,0.07,0.08,0.14,0.23,0.03,0.11},现以此为例设计哈夫曼编码。哈夫曼编码设计过程为:(1)为方便计算,将所有字符的频度乘以100,使其转换成整型数值集合,得到{5,29,7,8,14,23,3,11};(2)以此集合中的数值作为叶子结点的权值构造一棵哈夫曼树,如图5-27所示;(3)由此哈夫曼树生成哈夫曼编码,如图5-28所示。最后得出每个字符的编码为:比如,发送一段编码:0000011011010010,接收方可以准确地通过译码得到:⑥⑥⑦⑤②⑧。

C语言的二叉树中序遍历问题

#include 《stdio.h》#include 《stdlib.h》#define STACK_MAX_SIZE 30#define QUEUE_MAX_SIZE 30#ifndef elemTypetypedef char elemType;#endif/************************************************************************//* 以下是关于二叉树操作的11个简单算法 *//************************************************************************/struct BTreeNode{elemType data;struct BTreeNode *left;struct BTreeNode *right;};/* 1.初始化二叉树 */void initBTree(struct BTreeNode* *bt){*bt = NULL;return;}/* 2.建立二叉树(根据a所指向的二叉树广义表字符串建立) */void createBTree(struct BTreeNode* *bt, char *a){struct BTreeNode *p;struct BTreeNode *s;/* 定义s数组为存储根结点指针的栈使用 */int top = -1; /* 定义top作为s栈的栈顶指针,初值为-1,表示空栈 */int k; /* 用k作为处理结点的左子树和右子树,k = 1处理左子树,k = 2处理右子树 */int i = 0; /* 用i扫描数组a中存储的二叉树广义表字符串,初值为0 */*bt = NULL; /* 把树根指针置为空,即从空树开始建立二叉树 *//* 每循环一次处理一个字符,直到扫描到字符串结束符\0为止 */while(a != ’\0’){ switch(a){ case ’ ’: break; /* 对空格不作任何处理 */ case ’(’: if(top == STACK_MAX_SIZE - 1){ printf("栈空间太小!\n"); exit(1); } top++; s = p; k = 1; break; case ’)’: if(top == -1){ printf("二叉树广义表字符串错误!\n"); exit(1); } top--; break; case ’,’: k = 2; break; default: p = malloc(sizeof(struct BTreeNode)); p-》data = a; p-》left = p-》right = NULL; if(*bt == NULL){ *bt = p; }else{ if( k == 1){ s-》left = p; }else{ s-》right = p; } } } i++; /* 为扫描下一个字符修改i值 */}return;}/* 3.检查二叉树是否为空,为空则返回1,否则返回0 */int emptyBTree(struct BTreeNode *bt){if(bt == NULL){ return 1;}else{ return 0;}}/* 4.求二叉树深度 */int BTreeDepth(struct BTreeNode *bt){if(bt == NULL){ return 0; /* 对于空树,返回0结束递归 */}else{ int dep1 = BTreeDepth(bt-》left); /* 计算左子树的深度 */ int dep2 = BTreeDepth(bt-》right); /* 计算右子树的深度 */ if(dep1 》 dep2){ return dep1 + 1; }else{ return dep2 + 1; }}}/* 5.从二叉树中查找值为x的结点,若存在则返回元素存储位置,否则返回空值 */elemType *findBTree(struct BTreeNode *bt, elemType x){if(bt == NULL){ return NULL;}else{ if(bt-》data == x){ return &(bt-》data); }else{ /* 分别向左右子树递归查找 */ elemType *p; if(p = findBTree(bt-》left, x)){ return p; } if(p = findBTree(bt-》right, x)){ return p; } return NULL; }}}/* 6.输出二叉树(前序遍历) */void printBTree(struct BTreeNode *bt){/* 树为空时结束递归,否则执行如下操作 */if(bt != NULL){ printf("%c", bt-》data); /* 输出根结点的值 */ if(bt-》left != NULL || bt-》right != NULL){ printf("("); printBTree(bt-》left); if(bt-》right != NULL){ printf(","); } printBTree(bt-》right); printf(")"); } }return;}/* 7.清除二叉树,使之变为一棵空树 */void clearBTree(struct BTreeNode* *bt){if(*bt != NULL){ clearBTree(&((*bt)-》left)); clearBTree(&((*bt)-》right)); free(*bt); *bt = NULL;}return;}/* 8.前序遍历 */void preOrder(struct BTreeNode *bt){if(bt != NULL){ printf("%c ", bt-》data); /* 访问根结点 */ preOrder(bt-》left); /* 前序遍历左子树 */ preOrder(bt-》right); /* 前序遍历右子树 */}return;}/* 9.前序遍历 */void inOrder(struct BTreeNode *bt){if(bt != NULL){ inOrder(bt-》left); /* 中序遍历左子树 */ printf("%c ", bt-》data); /* 访问根结点 */ inOrder(bt-》right); /* 中序遍历右子树 */}return;}/* 10.后序遍历 */void postOrder(struct BTreeNode *bt){if(bt != NULL){ postOrder(bt-》left); /* 后序遍历左子树 */ postOrder(bt-》right); /* 后序遍历右子树 */ printf("%c ", bt-》data); /* 访问根结点 */}return;}/* 11.按层遍历 */void levelOrder(struct BTreeNode *bt){struct BTreeNode *p;struct BTreeNode *q;int front = 0, rear = 0;/* 将树根指针进队 */if(bt != NULL){ rear = (rear + 1) % QUEUE_MAX_SIZE; q = bt;}while(front != rear){ /* 队列非空 */ front = (front + 1) % QUEUE_MAX_SIZE; /* 使队首指针指向队首元素 */ p = q; printf("%c ", p-》data); /* 若结点存在左孩子,则左孩子结点指针进队 */ if(p-》left != NULL){ rear = (rear + 1) % QUEUE_MAX_SIZE; q = p-》left; } /* 若结点存在右孩子,则右孩子结点指针进队 */ if(p-》right != NULL){ rear = (rear + 1) % QUEUE_MAX_SIZE; q = p-》right; }}return;}/************************************************************************//*int main(int argc, char *argv){struct BTreeNode *bt; /* 指向二叉树根结点的指针 */char *b; /* 用于存入二叉树广义表的字符串 */elemType x, *px;initBTree(&bt);printf("输入二叉树广义表的字符串:\n");/* scanf("%s", b); */b = "a(b(c), d(e(f, g), h(, i)))";createBTree(&bt, b);if(bt != NULL)printf(" %c ", bt-》data);printf("以广义表的形式输出:\n");printBTree(bt); /* 以广义表的形式输出二叉树 */printf("\n");printf("前序:"); /* 前序遍历 */preOrder(bt);printf("\n");printf("中序:"); /* 中序遍历 */inOrder(bt);printf("\n");printf("后序:"); /* 后序遍历 */postOrder(bt);printf("\n");printf("按层:"); /* 按层遍历 */levelOrder(bt);printf("\n");/* 从二叉树中查找一个元素结点 */printf("输入一个待查找的字符:\n");scanf(" %c", &x); /* 格式串中的空格跳过空白字符 */px = findBTree(bt, x);if(px){ printf("查找成功:%c\n", *px);}else{ printf("查找失败!\n");}printf("二叉树的深度为:");printf("%d\n", BTreeDepth(bt));clearBTree(&bt);return 0;}

数组二叉树的遍历(用VB编写 二叉树的建立与遍历、二叉树的排序)

本文编辑:admin
: 数组二叉树的遍历
上一篇: springmvc拦截请求体(springmvc如果在拦截请求中,我想拦截get方式提交的方法,怎么配置)
下一篇: utf16be编码转换器(为什么UTF-16要有LE和BE之分)

更多文章:


美国总统大选机制(美国大选的流程和规则)

美国总统大选机制(美国大选的流程和规则)

本文目录美国大选的流程和规则美国的选举制度详细介绍.美国地区总统是通过何种方式推选出来的美国的总统选举制度是怎样的美国大选的机制是怎么样的美国的总统选举制度是怎么样的美国大选的流程和规则法律分析:时间:每4年一次,选举年的11月1日之后的首

2024年3月20日 10:50

pessimism(pessimism是什么意思)

pessimism(pessimism是什么意思)

本文目录pessimism是什么意思pessimism什么意思pessimism是什么意思pessimism美 英 n.悲观;悲观主义;悲观情绪 悲观的;悲观主义的;指悲观句筛选1.Pessimism, when you get used

2024年4月21日 15:25

rule用法(plan与rule的区别(用法上))

rule用法(plan与rule的区别(用法上))

本文目录plan与rule的区别(用法上)道德与法治的英语rule的名词用法和动词用法plan与rule的区别(用法上)plan 即可做名词,也可作动词 作名词意为计划,规划,方案,如make a plan,作动词为计划,打算plan to

2024年6月6日 01:09

inarray方法(2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题)

inarray方法(2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题)

本文目录2个自定义的PHP in_array 函数,解决大量数据判断in_array的效率问题in_array的参数描述jquery.inarray,原生js怎么实现PHP判断数组中是否存在某一数值的函数in_array2个自定义的PHP

2023年11月11日 15:40

linux系统软件(linux哪个操作系统好)

linux系统软件(linux哪个操作系统好)

本文目录linux哪个操作系统好不同Linux系统的软件能通用吗linux哪个操作系统好linux哪个操作系统好?这个要看你的具体用途了,如果是个人使用,ubuntu、deepin就非常不错,界面漂亮、软件齐全,如果是作为服务器使用,建议选

2024年5月27日 14:19

英语培训机构名称(寓意好的英语培训班名字)

英语培训机构名称(寓意好的英语培训班名字)

本文目录寓意好的英语培训班名字英语口语培训机构排名英语培训机构排名英语培训机构有哪些英语培训十大机构英语培训机构如何起名 有内涵的培训班名字英语学习培训机构都有哪些,哪家比较好寓意好的英语培训班名字寓意好的英语培训班名字如下:1、【华大】作

2024年3月12日 12:40

ignite软件(如何配置hp ignite服务器端)

ignite软件(如何配置hp ignite服务器端)

本文目录如何配置hp ignite服务器端C#做的软件 在UNIX、XENIX、Mac OS 系统中可以运行吗是不是要装Framework~新版Office办公套装将包括什么hitfilm ignite支持edius7么lgniter软件怎

2024年6月10日 06:50

组织机构代码是什么(组织机构代码是指什么)

组织机构代码是什么(组织机构代码是指什么)

本文目录组织机构代码是指什么组织机构代码和统一社会信用代码是什么组织机构代码是什么意思组织机构代码是什么单位组织机构代码是什么组织机构代码是指什么组织机构代码是对中国境内依法注册、依法登记的机关、企事业单位、社会团体,以及其他组织机构颁发的

2024年6月6日 00:37

iis如何配置?在iis中设置ftp的详细步骤越详细越好

iis如何配置?在iis中设置ftp的详细步骤越详细越好

本文目录iis如何配置在iis中设置ftp的详细步骤越详细越好iis如何配置IIS服务器组建一览 IIS(Internet Information Server,互联网信息服务)是一种Web(网页)服务组件,其中包括Web服务器、FTP服务

2024年6月13日 02:48

数据库中substring的用法(substring在SQL语句中是什么意思)

数据库中substring的用法(substring在SQL语句中是什么意思)

本文目录substring在SQL语句中是什么意思substring的用法C#中substring怎么用的substring的用法 怎么截取字符串subString的用法数据库中substr是什么意思SQL中SUBSTRING的用法数据库的

2024年6月20日 08:31

潍坊网站定制模板建站(潍坊网站制作公司哪家好哪家最专业)

潍坊网站定制模板建站(潍坊网站制作公司哪家好哪家最专业)

本文目录潍坊网站制作公司哪家好哪家最专业怎么样判断一个网站的好与坏潍坊网站建设潍坊网站制作公司哪家好哪家最专业单从技术上来说的话,潍坊百优网不是最强的,但从设计上,网站价格上以及后期服务上来看,还是非常可以肯定的怎么样判断一个网站的好与坏潍

2024年6月5日 05:38

血色浪漫宁伟(他是《血色浪漫》宁伟,出道26年,演技扎实就是不红,他是谁)

血色浪漫宁伟(他是《血色浪漫》宁伟,出道26年,演技扎实就是不红,他是谁)

本文目录他是《血色浪漫》宁伟,出道26年,演技扎实就是不红,他是谁《血色浪漫》大结局是什么《血色浪漫》中的“宁伟“为什么从军队回来了电视剧《血色浪漫》中宁伟是怎么走上歧途的电视剧《血色浪漫》中宁伟是什么时候认识钟跃民的他是《血色浪漫》宁伟,

2023年6月13日 23:40

microsoft visual c   runtime下载(microsoft visual c++ runtime library R6034)

microsoft visual c runtime下载(microsoft visual c++ runtime library R6034)

本文目录microsoft visual c++ runtime library R6034microsoft visualC+runtime library电脑出现在microsoft visual c ++ runtime librar

2023年6月4日 08:00

提交更改级别(刚才英语四六级网上报名,填完提交后发现应该报六级的,可是查看已报级别却是四级的,有什么没办法修改吗)

提交更改级别(刚才英语四六级网上报名,填完提交后发现应该报六级的,可是查看已报级别却是四级的,有什么没办法修改吗)

本文目录刚才英语四六级网上报名,填完提交后发现应该报六级的,可是查看已报级别却是四级的,有什么没办法修改吗计算机软考报名等级报错了可以改吗学生资助信息系统如何修改困难等级99围棋老师的怎么改等级征信中心个人账号安全级别怎么改烟草 级别如何更

2024年5月18日 06:13

sometimes的同义词(sometimes同义词两个词)

sometimes的同义词(sometimes同义词两个词)

本文目录sometimes同义词两个词To cure sometimes,to relieve often,to comfort always 出处sometimes的同义词是什么from time to time什么意思及同义词somet

2024年6月19日 02:34

rubber(美语当中经常用「rubber」来表示避孕套吗)

rubber(美语当中经常用「rubber」来表示避孕套吗)

本文目录美语当中经常用「rubber」来表示避孕套吗rubberbandits怎么开始游戏rubberbandits为什么买了进去显示buy nowrubberband中文怎么读美语当中经常用「rubber」来表示避孕套吗这么一说我想起来,

2024年5月7日 18:08

average函数的使用方法和技巧(求平均数公式excel函数)

average函数的使用方法和技巧(求平均数公式excel函数)

本文目录求平均数公式excel函数Excel平均值及计数函数的用法求数据区域的平均数用AVERAGE()函数如何操作求平均数公式excel函数excel用函数计算平均分,可使用AVERAGE求平均值函数实现。方法步骤如下:1、打开需要操作的

2024年5月16日 21:42

sqlyog有必要用密钥吗(sql server2012密钥 用哪个)

sqlyog有必要用密钥吗(sql server2012密钥 用哪个)

本文目录sql server2012密钥 用哪个Windows密钥激活和用软件激活到底有什么区什么是密钥协商,为什么在互联网中必须使用密钥协商sql server2012密钥 用哪个序列号:YQWTX-G8T4R-QW4XX-BVH62-G

2024年4月21日 00:40

前端开发需要学多久(新手学web前端开发需要多久)

前端开发需要学多久(新手学web前端开发需要多久)

本文目录新手学web前端开发需要多久学前端要多久小白学前端一般学多久前端培训最快多久前端开发需要学多长时间前端从入门到精通大概需要多长时间前端学习要多长时间 前端开发多长时间才能学会新手学web前端开发需要多久假如说零基础学习,那么前端开发

2024年6月16日 18:29

mysql怎么导出数据库给别人(mysql数据库怎么导出到另一个数据库中)

mysql怎么导出数据库给别人(mysql数据库怎么导出到另一个数据库中)

本文目录mysql数据库怎么导出到另一个数据库中mysql数据库怎么导出mysql数据库怎么导出到另一个数据库中db1为原数据库,db2为要导出到的数据库,fromtable 是要导出的表名1.方法一:登录导出到的数据库,执行create

2024年6月12日 04:57

近期文章

真北斗无双好玩吗,有人玩过了吗?北斗无双和真北斗无双的区别是什么
真北斗无双好玩吗,有人玩过了吗?北斗无双和真北斗无双的区别是
2024-06-21 07:23:58
swing的过去式(swing的过去式是什么)
swing的过去式(swing的过去式是什么)
2024-06-21 07:23:38
一分钟学会看k线图(如何看懂股票k线图的方法)
一分钟学会看k线图(如何看懂股票k线图的方法)
2024-06-21 07:23:31
怎么用小鸡手柄玩安卓游戏需要什么映射软件吗具体怎么按键操作?小鸡手柄精灵root之后映射未开启!绝对不是手机问题,刷了56个系统了!!!客服呢出来解释一下
怎么用小鸡手柄玩安卓游戏需要什么映射软件吗具体怎么按键操作?
2024-06-21 07:23:09
末影龙怎么驯服(迷你世界中怎么驯服未影龙)
末影龙怎么驯服(迷你世界中怎么驯服未影龙)
2024-06-21 07:21:33
下载手机卫士(如何使用360手机卫士进行手机杀毒)
下载手机卫士(如何使用360手机卫士进行手机杀毒)
2024-06-21 07:21:26
3322软件下载站(求SmartDraw软件下载地址)
3322软件下载站(求SmartDraw软件下载地址)
2024-06-21 07:21:19
桌面锁定软件(有没什么软件能锁电脑桌面)
桌面锁定软件(有没什么软件能锁电脑桌面)
2024-06-21 07:21:19
windows清理助手(清理软件有哪些)
windows清理助手(清理软件有哪些)
2024-06-21 07:21:17
python的用途(Python有哪些用途)
python的用途(Python有哪些用途)
2024-06-21 07:20:52
本站热文

中国银行企业网银超级管理员功能是否可以设置单位E-mail地址?中国银行企业网银超级管理员签约信息设置有什么功能
中国银行企业网银超级管理员功能是否可以设置单位E-mail地
2024-06-12 10:36:42 浏览:5891
高德地图怎么看时速(高德地图上面显示的里程上面显示媲美超跑到底是多少时速公里)
高德地图怎么看时速(高德地图上面显示的里程上面显示媲美超跑到
2024-06-20 20:47:49 浏览:2370
iphone vpn设置(ios设置vpn快捷开关)
iphone vpn设置(ios设置vpn快捷开关)
2024-06-16 18:36:32 浏览:2293
windows12正式版下载(操作系统Windows Server 2012 R2,在哪能下载到,公司用的)
windows12正式版下载(操作系统Windows Ser
2024-06-11 05:56:52 浏览:1716
Mac 如何关闭弹出式窗口阻止功能?苹果电脑弹出式窗口被阻止怎么办
Mac 如何关闭弹出式窗口阻止功能?苹果电脑弹出式窗口被阻止
2024-06-12 08:23:38 浏览:1446
洛克王国修理大考验(洛克王国修理大考验第三关怎么过)
洛克王国修理大考验(洛克王国修理大考验第三关怎么过)
2024-06-20 19:23:07 浏览:1202
java安装教程(win10如何安装JAVA)
java安装教程(win10如何安装JAVA)
2024-06-12 09:53:10 浏览:1146
client mfc application未响应(每次进cf就提示client MFC Application未响应该怎么办啊!急急急)
client mfc application未响应(每次进c
2024-06-14 21:21:37 浏览:1137
改变字体颜色的代码(如何使用代码改变文字的颜色和大小)
改变字体颜色的代码(如何使用代码改变文字的颜色和大小)
2024-06-20 20:21:52 浏览:1040
xml文件打开全是代码怎么办(用记事本打开XML文件乱码是怎么回事)
xml文件打开全是代码怎么办(用记事本打开XML文件乱码是怎
2024-06-20 21:52:23 浏览:1022
标签列表

热门搜索


顶部

PHP网站源码横岗seo排名光明企业网站设计荷坳网站推广系统爱联优化坪地优化木棉湾建站木棉湾标王南澳网站优化按天扣费布吉网站优化布吉建设网站石岩至尊标王木棉湾企业网站制作沙井百度标王深圳营销型网站建设木棉湾SEO按效果付费永湖网页制作盐田企业网站设计南联网站优化南联网站推广工具丹竹头百搜词包南澳seo坪地网站设计永湖网站搜索优化光明网站推广福永设计公司网站东莞网站推广工具龙岗网站设计大浪网站定制丹竹头网站改版横岗推广网站歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

PHP网站源码 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化