实验八:二叉树的遍历与应用

合集下载

二叉树遍历算法的应用

二叉树遍历算法的应用

二叉树遍历算法的应用引言二叉树是一种重要的数据结构,在计算机科学中有着广泛的应用。

二叉树的遍历算法是对二叉树上的节点进行访问的一种方式,是研究二叉树的基础和核心。

二叉树的定义与性质二叉树是一种特殊的树,其中每个节点最多有两个孩子节点。

二叉树的定义如下所示:class TreeNode:def __init__(self, val=0, left=None, right=None):self.val = valself.left = leftself.right = right二叉树的性质包括: - 每个节点最多有两个孩子节点; - 左子树和右子树也是二叉树; - 二叉树可以为空。

二叉树的遍历算法二叉树的遍历算法可以分为三种常用的方法:前序遍历、中序遍历和后序遍历。

这三种遍历方式的区别在于访问根节点的时机不同。

前序遍历前序遍历是指先访问根节点,再遍历左子树,最后遍历右子树。

前序遍历的递归算法如下所示:def preorderTraversal(root):if root is None:return []return [root.val] + preorderTraversal(root.left) + preorderTraversal(root. right)中序遍历中序遍历是指先遍历左子树,再访问根节点,最后遍历右子树。

中序遍历的递归算法如下所示:def inorderTraversal(root):if root is None:return []return inorderTraversal(root.left) + [root.val] + inorderTraversal(root.ri ght)后序遍历后序遍历是指先遍历左子树,再遍历右子树,最后访问根节点。

后序遍历的递归算法如下所示:def postorderTraversal(root):if root is None:return []return postorderTraversal(root.left) + postorderTraversal(root.right) + [r oot.val]除了递归算法,还可以使用栈来实现二叉树的遍历算法。

二叉树遍历算法的应用

二叉树遍历算法的应用

⼆叉树遍历算法的应⽤1)⼆叉树的叶⼦节点个数////⼆叉树叶⼦节点,使⽤先序遍历⽅法,叶⼦节点的特点为左右孩⼦节点为空find_leaf(Btree* t,int& n){if(t){if(!t->lchild&&!t->rchild){++n;}find_leaf(t->lchild,n);find_leaf(t->rchild,n);}}2)⼆叉树深度//⼆叉树的深度,主要考虑左右⼦树的深度最⼤者加1为树的深度,因为要算出左右⼦树的深度,所以使⽤后序遍历int tree_deep(Btree* t){if(!t){return0;}else{int l_deep=tree_deep(t->lchild);int r_deep=tree_deep(t-rchild);return l_deep>=r_deep?(l_deep+1):(r_deep+1);}}3)⼆叉树的复制//复制⼆叉树,⾸先是对⼀个节点的复制,主要是⽣成空间,复制数据信息,然后复制左⼦树,然后复制右⼦树,所以⽤后续遍历,⾸先查找做⼦树,然后右⼦树BtreeNode* tree_copy(Btree* t){if(!t)return NULL;if(t->lchild)BtreeNode* ltree=tree_copy(t->child);elseltree=NULL;if(t->rchild)BtreeNode* rtree=tree_copy(r->child);elsertree=NULL;BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeBode));if(!p)return NULL;p->elem=t->elem;p->lchild=ltree;p->rchild=rtree;return p;}4)⼆叉树链表的构造//1. 根据已知字符的先序序列构造⼆叉树,为空的⼦树⽤空格表⽰void creat_tree(Btree* t){char ch=getchar();if(ch=='')return t=NULL;t=(BtreeNode*)molloc(sizeof(BtreeNode));if(!t)exit(overflow_error);t->elem=ch;creat_tree(t->lchild);creat_tree(t->rchild);}//2. 根据表达式建⽴⼆叉树//已知表达式的先序序列,然后建⽴⼆叉树//⼆元表达式性质我们可知,如果字符为运算符则必定存在左右⼦树//如果为字符则左右⼦树必定为空,根据这两个性质使⽤先序遍历建⽴⼆叉树//(a+b)*c-d/e//先序表达式-*+abc/devoid creat_tree(Btree* t){char ch;ch=getchar();t=(BtreeNode*)molloc(sizeof(BtreeNode));if(!t)exit(overflow_error);t->elem=ch;if(ch=='运算符'){creat_tree(t->lchild);creat_tree(t->rchild);}else{t->lchild=NULL;t->rchild=NULL;return;}}//已知后缀表达式,建⽴⼆叉树void creat_tree(BtreeNode* t){stack<BtreeNode*> s;char ch;while(ch=getchar()){if(ch=='运算符'){BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->rchild=s.pop();p->lchild=s.pop();t=p;s.push(p);}else{BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error)p->elem=ch;p->rchild=NULL;p->lchild=NULL;}}}//根据表达式建⽴⼆叉树或者后缀式建⽴⼆叉树,使⽤表达式的后缀表⽰⽅法建⽴⼆叉树,表达式的后缀表⽰法使⽤栈来建⽴//所以需要使⽤两个栈,⼀个栈存储表达式的运算符,⼀个栈⽤于存储⼦树的根节点指针void creat_tree(Btree* t){stack* sexp;stack* stree;sexp.push("#");char ch;while(ch=getchar()){switch(ch){case'(':{sexp.push(ch);break;}case')':{char c;while((c=sexp.pop())!='('){BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->rchild=stree.pop();p->lchild=stree.pop();stree.push(p);}break;}case'运算符':{if(comp(ch,sexp.top()))//⽐较运算符的优先级,优先级⼤⼊栈 sexp.push(ch);else{BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->rchild=stree.pop();p->lchild=stree.pop();stree.push(p);}break;}case'#':{char c;while((c=sexp.pop())!='#'){BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->rchild=stree.pop();p->lchild=stree.pop();stree.push(p);}}default:{BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->rchild=NULL;p->lchild=NULL;stree.push(p);}}}}//已知前缀表达式的⾮递归算法void creat_tree(Btree* t){char ch;stack<BtreeNode*> s;while(ch=getchar()){if(ch='运算符'){BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;if(!s.empty()){BtreeNode *q=s.top();if(!q->lchild){q->lchild=p;s.push(q);}else{q->rchild=p;s.pop();s.push(p);}}}else{BtreeNode* p=(BtreeNode*)malloc(sizeof(BtreeNode));if(!p)exit(overflow_error);p->elem=ch;p->lchild=NULL;p->rchild=NULL;BtreeNode *q=s.top();if(!q->lchild){q->lchild=p;}else{q->rchild=p;s.pop();}}}}//3.根据先序和中序,或者中序和后序建⽴⼆叉树链表。

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)

二叉树遍历操作的基本应用(复制、求深度、求叶子数、求节点数等)1. 引言1.1 概述二叉树是计算机科学领域中常用的数据结构之一,具有广泛的应用场景。

在二叉树的操作中,遍历是其中最基本和常见的操作之一。

通过遍历,我们可以按照特定规则依次访问二叉树中的所有节点。

本文将探讨二叉树遍历操作的基本应用,包括复制、求深度、求叶子数、求节点数等。

这些操作不仅在实际开发中有重要意义,而且对于理解和掌握二叉树数据结构及其相关算法也具有重要作用。

1.2 文章结构本文将分为五个部分进行论述。

首先,在引言部分(第1节)我们将概述文章的主题和目标。

紧接着,在第2节中,我们将介绍二叉树遍历的基本应用,包括复制、求深度、求叶子数和求节点数等。

在第3节中,我们将详细解析这些基本应用,并给出相应算法和实例分析。

接下来,在第4节中,我们将通过实际案例应用来验证并讨论这些基本应用的性能与适用范围。

最后,在第5节中总结全文内容,并对未来研究方向进行展望。

1.3 目的本文的目的是通过对二叉树遍历操作的基本应用进行详细剖析,帮助读者深入理解和掌握二叉树数据结构及其相关算法。

同时,我们希望通过实际案例应用与讨论,探讨如何优化算法性能、提高效率以及适应大规模二叉树遍历问题。

通过本文的阅读,读者将能够全面了解并应用二叉树遍历操作的基本方法,在实际开发中解决相关问题,并为进一步研究和探索提供思路与参考。

该部分主要介绍了文章的概述、结构和目的,引导读者了解全文并明确阅读目标。

2. 二叉树遍历的基本应用:二叉树是一种常见的数据结构,其遍历操作可以应用于多种实际问题中。

本节将介绍四个基本的二叉树遍历应用:复制二叉树、求二叉树的深度、求二叉树的叶子数和求二叉树的节点数。

2.1 复制二叉树:复制一个二叉树意味着创建一个与原始二叉树结构完全相同的新二叉树。

该应用场景在涉及对原始数据进行修改或者对数据进行独立操作时非常有用。

复制操作可以以递归方式实现,通过先复制左子树,再复制右子树,最后创建一个与当前节点值相等的新节点来完成。

二叉树的建立及其遍历实验报告

二叉树的建立及其遍历实验报告

数据结构实验报告———二叉树的建立及其遍历一、实验目的1、了解二叉树的建立的方法及其遍历的顺序,熟悉二叉树的三种遍历2、检验输入的数据是否可以构成一颗二叉树二、实验的描述和算法1、实验描述二叉树的建立首先要建立一个二叉链表的结构体,包含根节点和左右子树。

因为耳熟的每一个左右子树又是一颗二叉树,所以可以用递归的方法来建立其左右子树。

二叉树的遍历是一种把二叉树的每一个节点访问完并输出的过程,遍历时根结点与左右孩子的输出顺序构成了不同的遍历方法,这个过程需要按照不同的遍历的方法,先输出根结点还是先输出左右孩子,可以用选择语句实现。

2、算法#include <stdio.h>#include <stdlib.h>#define OVERFLOW 0#define OK 1#define ERROR 0typedef struct BiTNode {char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;BiTree CreateBiTree(BiTree T){scanf("%c",&e);if(e==' ') T=NULL;else {if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))exit(OVERFLOW);T->data=e;T->lchild=CreateBiTree(T->lchild);T->rchild=CreateBiTree(T->rchild);}return T; }/************************前序遍历***********************/ char PreOrderTraverse(BiTree T,char (* Visit)(char e)){if(T){if(Visit(T->data))if(PreOrderTraverse(T->lchild,Visit))if(PreOrderTraverse(T->rchild,Visit)) return OK;return ERROR;}else return OK;}char Visit(char e){printf("%5c",e);return OK;}main(){printf("请输入一颗二叉树,按回车结束:\n");T=CreateBiTree(T);printf("先序遍历的结果:");PreOrderTraverse(T,Visit);}三、调试分析在调这个程序是并没有遇到很大的困难,就是在输入一颗二叉树时,遇到了一点麻烦。

08.二叉树的遍历及应用

08.二叉树的遍历及应用

前序遍历算法
若二叉树非空,则按以下次序进行(递归)遍历: T 访问根结点; 前序遍历根结点的左子树; A 前序遍历根结点的右子树。 void PreOrder(BTNode *root) { ^ F ^ E ^ ^ D ^ if(root!=NULL){ ^ cout<<root->data; //访问根 PreOrder( root->left ); //前序遍历左子树 PreOrder( root->right ); //前序遍历右子树 } A B D E C F G }
A
B
D F G E
C
H
F B右子树 B G A左子树 C左子树 C D H E A右子树
A
【例6】已知一颗二叉树的后序遍历序列和中序遍 历序列分别为 EBDCA 和 BEADC ,试画出这颗 二叉树。
思路:由任意一个遍历序列均不能惟一确定一颗 二叉树,只有知道中序和后序或中序和前 序遍历序列才能惟一确定一颗二叉树。 确定方法:由前序(或后序)遍历序列确定树或 子树的根,再由中序遍历序列确定根 的左子树和右子树。
建立二叉树
统计二叉树中结点总数
计算二叉树深度
查找二叉树中值为item的结点 清空二叉树
以二叉树的某种遍历序列建立二叉树
void CreateBTree_Pre(BTNode *&root) { //要求按照前序遍历序列输入结点值item char item; cin>>item; if(item == '#') //如果读入#字符,创建空树 { root = NULL; return ;} else{ root = new BTNode; root->data = item; CreateBTree_Pre (root->left); //建左子树 CreateBTree_Pre (root->right); //建右子树 } }

二叉树遍历实验报告

二叉树遍历实验报告

1.实验题目二叉树的建立与遍历[问题描述]建立一棵二叉树,并对其进行遍历(先序、中序、后序),打印输出遍历结果。

2.需求分析(1)输入的形式和输入值的范围:以字符形式按先序遍历输入(2)输出的形式:依次按递归先序、中序、后序遍历,非递归先序、中序、后序遍历结果输出(3) 程序所能达到的功能:从键盘接受输入(先序)进行遍历(先序、中序、后序),将遍历结果打印输。

(4) 测试数据:ABCффDEфGффFффф(其中ф表示空格字符)则输出结果为先序:ABCDEGF中序:CBEGDFA后序:CGBFDBA3.概要设计(1)struct btnode{char data; 数据struct btnode *Lchild;左子数指针struct btnode *Rchild; 右子数指针};struct btnode *createbt(struct btnode *bt )初始条件:空二叉树存在操作结果:先序建立二叉树void preOrder(struct btnode *bt)初始条件:二叉树存在递归先序遍历二叉树void preOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归先序遍历void midOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归中序遍历void midOrder1(struct btnode *bt)初始条件:二叉树存在操作结果:非递归中序遍历void postOrder(struct btnode *bt)初始条件:二叉树存在操作结果:递归后序遍历void postOrder1 (struct btnode *bt)初始条件:二叉树存在操作结果:非递归后序遍历void main() 主函数(2)void main() 主函数{*createbtpreOrderpreOrder1midOrdermidOrder1postOrderpostOrder1}4.详细设计struct btnode{char data;struct btnode *Lchild;struct btnode *Rchild;};struct btnode *createbt(struct btnode *bt ){ 输入结点数据c检查存储空间将c赋给结点参数p递归建立左子树递归建立右子树}void preOrder(struct btnode *bt){判断树是否为空输出根结点数data递归遍历左子树递归遍历右子树}void preOrder1(struct btnode *bt){定义栈,结点参数pWhile(栈或p是否为空){While(p!=null){输出根结点数data将根结点压栈遍历左子树}提取栈顶元素值栈顶元素出栈访问右子树}void midOrder(struct btnode *bt){判断树是否为空递归遍历左子树输出根结点数data递归遍历右子树}void midOrder1(struct btnode *bt){定义栈,结点参数pWhile(栈或p是否为空){While(p!=null){将根结点压栈遍历左子树}提取栈顶元素值输出根结点数data栈顶元素出栈访问右子树}void postOrder(struct btnode *bt){判断树是否为空递归遍历左子树递归遍历右子树输出根结点数data}void postOrder1 (struct btnode *bt){定义栈,结点参数p,prebt入栈While(栈或p是否为空){提取栈顶元素值if判断p是否为空或是pre的根结点输出根结点数data栈顶元素出栈栈顶元素p赋给pre记录else if右结点非空将右结点压栈if左结点将左结点压栈}}void main(){struct btnode *root=NULL;root=createbt(root);preOrder(root); midOrder(root); postOrder(root);preOrder1(root); midOrder1(root);postOrder1(root);}5.调试分析(1)先序建立二叉树时,虽用到递归建左右子树,但没有把他们赋值给根节点的左右指针,造成二叉树脱节。

二叉树遍历技巧

二叉树遍历技巧

二叉树遍历技巧二叉树是一种常见的数据结构,在计算机科学中被广泛应用。

在处理二叉树的过程中,遍历是一项基本操作,用于按照一定的顺序访问树中的节点。

本文将介绍二叉树的三种遍历方式:前序遍历、中序遍历和后序遍历,并探讨它们的特点及应用场景。

一、前序遍历前序遍历是指先访问根节点,再依次遍历左子树和右子树的过程。

具体步骤如下:1. 访问当前节点;2. 递归地前序遍历左子树;3. 递归地前序遍历右子树。

前序遍历的应用场景很多,例如在二叉树的构建中,可以按照前序遍历的顺序依次读取节点构建二叉树。

此外,前序遍历还可以用于将二叉树转化为前缀表达式,方便进行运算。

二、中序遍历中序遍历是指先遍历左子树,再访问根节点,最后遍历右子树的过程。

具体步骤如下:1. 递归地中序遍历左子树;2. 访问当前节点;3. 递归地中序遍历右子树。

中序遍历的特点是可以按照从小到大的顺序输出二叉搜索树中的节点值。

因此,在查找二叉搜索树中某个节点的值时,可以使用中序遍历来快速定位。

此外,中序遍历还可以用于将二叉树转化为中缀表达式,并进行后续的运算。

三、后序遍历后序遍历是指先遍历左子树和右子树,最后访问根节点的过程。

具体步骤如下:1. 递归地后序遍历左子树;2. 递归地后序遍历右子树;3. 访问当前节点。

后序遍历常用于一些涉及到子树的计算,例如计算二叉树的高度或判断二叉树是否为平衡树等。

除了以上三种基本的遍历方式,还有一种常见的遍历方式是层序遍历。

层序遍历是按照从上到下、从左到右的顺序逐层遍历二叉树的节点。

具体步骤如下:1. 将根节点入队;2. 循环执行以下步骤,直到队列为空:a. 出队一个节点,并访问该节点;b. 将该节点的左子节点入队(如果存在);c. 将该节点的右子节点入队(如果存在)。

层序遍历可以用于打印二叉树的结构,或者在解决一些需要按层处理的问题时使用。

二叉树的遍历是非常重要的操作,掌握了遍历的技巧可以更好地操作和处理二叉树。

前序遍历、中序遍历和后序遍历分别有各自的特点和应用场景,而层序遍历则适用于按层处理的情况。

二叉树的遍历及其应用

二叉树的遍历及其应用

二叉树的遍历及其应用二叉树的遍历及其应用摘要:二叉树是一种特殊的树,它在计算机科学领域提供了大量的实际应用。

二叉树依照需求可以通过阵列以及链接链表来实现。

树的遍历是指一次访问树的所有节点的过程。

遍历二叉树有三种方式,分别是先序遍历,中序遍历,后序遍历。

在遍历的过程中更加深入的了解二叉树遍历的算法过程及其应用,以至于充分的认识到二叉树遍历的优越性。

关键词:二叉树,遍历,先序遍历,中序遍历,后序遍历Traversing a binary tree and its application Abstract:A binary tree is a special type of tree that offers a lot of practical applications in the field of computer science.Binary trees can be implemented by using arrays as well as linked lists,depending upon the requirements. Traversing a tree refers to the process of visiting all the nodes of the tree once.There are three ways in which you can traverse a binary tree.They are inorder,preorder,and postorder traversal. In the process of binary,I deeply次。

这里提到的“访问”是指对结点施行某种操作,操作可以是输出结点信息,修改结点的数据值等,但要求这种访问不破坏它原来的数据结构。

在本文中,我们规定访问是输出结点信息data,且以二叉链表作为二叉树的存贮结构。

由于二叉树是一种非线性结构,每个结点可能有一个以上的直接后继,因此,必须规定遍历的规则,并按此规则遍历二叉树,最后得到二叉树所有结点的一个线性序列[1]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
}
voidInOrder(BitTreebt)
/*中序遍历二叉树*/
{
}
voidPostOrder(BitTreebt)
/*后序遍历二叉树*/
{
}
Step2:创建文件tree.c,编写测试遍历操作的主函数。
main()clrscr()CreateBiTree()PreOrder()InOrder()PostOrder()inຫໍສະໝຸດ maxvalue(BitTreebt)
6.编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。(首先在遍历过程中找到值为x结点,然后调用Get_Depth(),求得值为x的结点为根的子树的深度)。
注意:后面有算法的过程与步骤,请填空。
7.编写算法,实现二叉链表的先序非递归遍历。
voidPreOrderBiTree(BitTreeT)
typedefcharTElemType;
typedefstructBitNode
{TElemTypedata;
structBitNode*lchild, *rchild;
}BitNode,*BitTree;
/*BitTreebt;根结点指针,标识二叉链表*/
/*建立二叉树*/
BitTreeCreateBiTree(void)
/*调用CreateBiTree()创建二叉树*/
printf(“Create a tree inpreorder,pleaseinput data:”);

printf(“x=”);
scanf(“%c”,&x);
/*调用Get_Sub_Depth()实现求值为x的结点为根的子树深度的操作*/
;
}
三、实验题目
1.编写算法,按层输出一棵顺序存储的二叉树所有结点的值。
/**********level.c************/
#include <stdio.h>
#defineVirNode0 /*虚结点值*/
#define MAXSIZE 100 /*一维数组的容量*/
typedefintTElemType; /*二叉树结点值的类型*/
/***************tree.c*************/
#include“tree.h”
#include <windows.h>
voidmain()
{BitTreebt;
system(“CLS”); //清屏
/*调用CreateBiTree()创建二叉树*/
printf(“Create a tree inpreorder,pleaseinput data:”);
8.编写算法,对先序线索二叉树进行先序后继线索遍历。
voidthpreorder(BiThrTreeT)
四、基本思想、原理和算法描述
要求写出题目1、2、3的算法的设计思想。
五、源程序及测试结果
各题目的源程序
各题目的测试结果
六、算法性能分析
要求写出各题目的算法性能分析。
七、实验总结
总结调试过程中遇到的问题是如何解决的;以及对设计与实现的回顾讨论和分析;心得和体会。
实验8二叉树的遍历与应用
一、实验目的
1.进一步掌握指针变量的含义。
2.掌握二叉树的结构特征,理解并熟悉掌握创建二叉树和实现二叉树的三种遍历。
3.学会编写实现二叉树基本操作的递归算法,领会递归的实质。
二、实验要求
1.给出程序设计的基本思想、原理和算法描述。
2.源程序给出注释。
3.保存和打印出程序的运行结果,并结合程序进行分析。

/*调用PreOrder()先序遍历二叉树*/
printf(“The preorder:”);
;
/*调用InOrder()中序遍历二叉树*/
printf(“Theinorder:”);

printf("\n");
/*调用PostOrder()后序遍历二叉树*/
printf(“Thepostorder:”);
{/*输入先序序列建立二叉树*/
BitTreebt;
TElemTypech;
scanf("%c", &ch);
if (ch=='%')bt=NULL;
/*安排空指针*/
else
{ /*add codes*/
}
return (bt);
}
voidPreOrder(BitTreebt)
/*先序遍历二叉树*/
;
printf("\n");
}
题目6:编写递归算法,求二叉树中以元素值为x的结点为根的子树的深度。(首先在遍历过程中找到值为x结点,然后调用Get_Depth(),求得值为x的结点为根的子树的深度)。
/*****getsubdepth.c*****/
#include“tree.h”
voidGet_Sub_Depth(BiTreeT,TElemTypex)
[实验步骤提示]
题目2:以二叉链表为存储结构实现二叉树的三种遍历(先序、中序、后序)的递归算法。
Step1:建头文件tree.h,存放树的基本操作的定义。
/**********tree.h************/
#include <stdio.h>
#include <stdlib.h>
/*二叉链表的类型定义*/
2.以二叉链表为存储结构实现二叉树的三种遍历(先序、中序、后序)的递归算法。将tree.h和tree.c文件补充完整。
3.编写算法,按层次遍历一棵二叉链表。
4.编写算法,输出二叉树中所有度为2的结点。
voidprintdata(BitTreebt)
5.编写算法,求二叉树中结点的最大值。假设结点为整型。
typedefTElemTypeSqBitTree[MAXSIZE];
/*SqBitTree:顺序存储的二叉树类型名*/
voidleveltree(SqBitTreebt)
{}
void main()
{SqBitTreebb={15,1,2,3,4,5,0,0,8,0,0,11,0,0,0,0};
;
}
/*求二叉树中以值为x的结点为根的子树深度*/
/*以遍历方式找到值为x的结点,然后调用Get_Depth()得到以结点x为根的子树深度*/
{
}
intGet_Depth(BiTreeT)/*求树T深度的递归算法*/
{
}/*Get_Depth*/
main()
{BitTreebt;TElemTypex
clrscr();
相关文档
最新文档