(完整版)求二叉树结点路径

(完整版)求二叉树结点路径
(完整版)求二叉树结点路径

数据结构二叉树习题含答案

2.1 创建一颗二叉树 创建一颗二叉树,可以创建先序二叉树,中序二叉树,后序二叉树。我们在创建的时候为了方便,不妨用‘#’表示空节点,这时如果先序序列是:6 4 2 3 # # # # 5 1 # # 7 # #,那么创建的二叉树如下: 下面是创建二叉树的完整代码:穿件一颗二叉树,返回二叉树的根 2.2 二叉树的遍历 二叉树的遍历分为:先序遍历,中序遍历和后序遍历,这三种遍历的写法是很相似的,利用递归程序完成也是灰常简单的: 2.3 层次遍历 层次遍历也是二叉树遍历的一种方式,二叉树的层次遍历更像是一种广度优先搜索(BFS)。因此二叉树的层次遍历利用队列来完成是最好不过啦,当然不是说利用别的数据结构不能完成。 2.4 求二叉树中叶子节点的个数 树中的叶子节点的个数= 左子树中叶子节点的个数+ 右子树中叶子节点的 个数。利用递归代码也是相当的简单, 2.5 求二叉树的高度 求二叉树的高度也是非常简单,不用多说:树的高度= max(左子树的高度,右子树的高度) + 1 2.6 交换二叉树的左右儿子 交换二叉树的左右儿子,可以先交换根节点的左右儿子节点,然后递归以左右儿子节点为根节点继续进行交换。树中的操作有先天的递归性。。 2.7 判断一个节点是否在一颗子树中 可以和当前根节点相等,也可以在左子树或者右子树中。 2.8 求两个节点的最近公共祖先 求两个节点的公共祖先可以用到上面的:判断一个节点是否在一颗子树中。(1)如果两个节点同时在根节点的右子树中,则最近公共祖先一定在根节点的右子树中。(2)如果两个节点同时在根节点的左子树中,则最近公共祖先一定在根节点的左子树中。(3)如果两个节点一个在根节点的右子树中,一个在根节点的

数据结构第六章树和二叉树习题及答案

习题六树和二叉树 一、单项选择题 1.以下说法错误的是() A. 树形结构的特点是一个结点可以有多个直接前趋 B. 线性结构中的一个结点至多只有一个直接后继 C. 树形结构可以表达(组织)更复杂的数据 D. 树(及一切树形结构)是一种”分支层次”结构 E. 任何只含一个结点的集合是一棵树 2. 下列说法中正确的是() A. 任何一棵二叉树中至少有一个结点的度为2 B. 任何一棵二叉树中每个结点的度都为2 C. 任何一棵二叉树中的度肯定等于2 D. 任何一棵二叉树中的度可以小于2 3. 讨论树、森林和二叉树的关系,目的是为了() A. 借助二叉树上的运算方法去实现对树的一些运算 B. 将树、森林按二叉树的存储方式进行存储 C. 将树、森林转换成二叉树 D. 体现一种技巧,没有什么实际意义4.树最适合用来表示() A. 有序数据元素 B .无序数据元素 C.元素之间具有分支层次关系的数据 D .元素之间无联系的数据 5.若一棵二叉树具有10个度为2的结点,5个度为1的结点,则度为0的结点个数是()A.9 B .11 C .15 D .不确定 6. 设森林F中有三棵树,第一,第二,第三棵树的结点个数分别为M1, M2和M3与森林F 对应的二叉树根结点的右子树上的结点个数是()。 A.M1 B .M1+M2 C .M3 D .M2+M3 7.一棵完全二叉树上有1001个结点,其中叶子结点的个数是() A.250 B .500 C .254 D .505 E .以上答案都不对 8. 设给定权值总数有n 个,其哈夫曼树的结点总数为() A. 不确定 B . 2n C . 2n+1 D . 2n-1 9.二叉树的第I 层上最多含有结点数为() I I-1 I-1 I A.2I B .2 I-1 -1 C .2 I-1 D .2 I -1 10.一棵二叉树高度为h, 所有结点的度或为0,或为2,则这棵二叉树最少有()结点A.2h B .2h-1 C .2h+1 D .h+1 11. 利用二叉链表存储树,则根结点的右指针是()。 A.指向最左孩子 B .指向最右孩子 C .空D .非空 12.已知一棵二叉树的前序遍历结果为为()。 A.CBEFDA B .FEDCBA 13.已知某二叉树的后序遍历序列是()。 ABCDEF中序遍历结果 为 C .CBEDFA D dabec, 中序遍历序列是 CBAEDF则后序遍历的结 果 .不定 debac , 它的前序遍历是

二叉树求节点数

二叉树求节点数 #include #include #include //函数状态码定义 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 #define INFEASIBLE -2 #define NULL 0 typedef int Status; typedef int TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode *lchild,*rchild; }BitNode, *BiTree; Status PrintTElem(TElemType e) { printf("%d ",e); return OK; } Status CreateBiTree(BiTree &T){ TElemType e; scanf("%d",&e); if(e==0 )T=NULL; else{ T=(BiTree)malloc(sizeof(BiTNode)); if(!T)exit(OVERFLOW); T->data=e; CreateBiTree(T->lchild); CreateBiTree(T->rchild);

} return OK; } Status PreOrderTraverse(BiTree T,Status(*visit)(TElemType)) { if(T){ if( (*visit)(T->data) ) if( PreOrderTraverse(T->lchild,(*visit)) ) if( PreOrderTraverse(T->rchild,(*visit)) ) return OK; return ERROR; } else return OK; } int NodeCount(BiTree T){ //递归法统计所有结点的个数 int n; if(T==NULL)n=0; else n=1+NodeCount(T->lchild)+NodeCount(T->rchild); return n; } void main() { BiTree T; CreateBiTree(T); printf("二叉树T的先序输出序列为:"); PreOrderTraverse(T,PrintTElem); printf("\n"); printf("二叉树T的叶子节点数为 %d\n",NodeCount(T)); }

数据结构课程设计建立二叉树并求指定结点路径程序源代码

09级数据结构课程设计程序源代码#include"stdio.h" #include"stdlib.h" #define num 100 #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 #define RIGHT 1 #define LEFT 0 typedef int Status; typedef char DataType; int found; typedef struct node{ DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; BinTNode *p; int CreateBiTree(BinTree *bt) { char ch; scanf("%c",&ch); if(ch=='@') (*bt)=NULL; else { (*bt)=(BinTNode *)malloc(sizeof(BinTNode)); if(!(*bt)) return ERROR; (*bt)->data=ch; CreateBiTree(&(*bt)->lchild); CreateBiTree(&(*bt)->rchild); } return OK; } int Inorder(BinTree &bt)/{ BinTNode *stack[num]; //定义栈数组 int top=0; //初始化栈 stack[top]=bt; do { while(NULL!=stack[top]) { //扫描根结点及其所有的左结点并入栈 top=top+1; stack[top]=stack[top-1]->lchild; } top=top-1; //退栈 if(top>=0) //判断栈是否为空 { printf("%c",stack[top]->data); //访问结点 stack[top]=stack[top]->rchild; //扫描右子树

数据结构中二叉树各种题型详解及程序

树是一种比较重要的数据结构,尤其是二叉树。二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒。二叉树是递归定义的,因此,与二叉树有关的题目基本都可以用递归思想解决,当然有些题目非递归解法也应该掌握,如非递归遍历节点等等。本文努力对二叉树相关题目做一个较全的整理总结,希望对找工作的同学有所帮助。 二叉树节点定义如下: structBinaryTreeNode { intm_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; }; 相关链接: 轻松搞定面试中的链表题目 题目列表: 1. 求二叉树中的节点个数 2. 求二叉树的深度 3. 前序遍历,中序遍历,后序遍历 4.分层遍历二叉树(按层次从上往下,从左往右) 5. 将二叉查找树变为有序的双向链表 6. 求二叉树第K层的节点个数 7. 求二叉树中叶子节点的个数 8. 判断两棵二叉树是否结构相同 9. 判断二叉树是不是平衡二叉树 10. 求二叉树的镜像 11. 求二叉树中两个节点的最低公共祖先节点 12. 求二叉树中节点的最大距离 13. 由前序遍历序列和中序遍历序列重建二叉树 14.判断二叉树是不是完全二叉树 详细解答 1. 求二叉树中的节点个数 递归解法: (1)如果二叉树为空,节点个数为0 (2)如果二叉树不为空,二叉树节点个数= 左子树节点个数+ 右子树节点个数+ 1 参考代码如下: 1.int GetNodeNum(BinaryTreeNode * pRoot) 2.{ 3.if(pRoot == NULL) // 递归出口 4.return 0; 5.return GetNodeNum(pRoot->m_pLeft) + GetNodeNum(pRoot->m_pRight) + 1; 6.}

建立二叉树并求指定结点路径

#include #include #define num 100 #define OK 1 typedef int Status; typedef char DataType; typedef struct node{ DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; int found; BinTNode *p; Status CreateBiTree(BinTree &bt) {//按照先序遍历次序递归建立二叉树,参见教材P131算法6.4 //ABC@@DE@G@@F@@@ 对应于教材P127图6.8(b) char ch; printf("ch="); scanf("%c",&ch); getchar(); if (ch=='@') bt=NULL; else { bt=(BinTNode *)malloc(sizeof(BinTNode)); bt->data=ch; //生成根结点 CreateBiTree(bt->lchild); //构造左子树 CreateBiTree(bt->rchild); //构造右子树 } return OK; } Status Inorder(BinTree bt) {//二叉树非递归中序遍历算法 BinTNode *p,*s[100]; //定义数组栈 int i=0; //初始化栈 p=bt; do { while(p!=NULL) //扫描根结点及其所有的左结点并将其地址入栈{ s[i++]=p;

二叉树的遍历与求结点路径

课程设计项目研究报告 目录 摘要 (1) 1、引言 (2) 1.1课题设计背景 (2) 1.2 课题设计的目的和意义 (2) 1.3课题的内容 (2) 2、课程设计计划表 (3) 2.1人员分配表 (3) 2.2课程设计完成进度表 (3) 3、总体设计 (4) 3.1课程设计的方案设计论证 (4) 3.2主要数据存储结构设计 (4) 3.3模块的划分及功能描述 (4) 4、程序设计 (5) 4.1程序流程图 (5) 4.2重要函数 (6) 4.3程序详细分析 (7) 5、源程序 (16) 6、程序运行及结果 (21) 6.1程序运行环境 (21) 6.2运行结果 (21) 7、课程设计心得体会 (24) 8、参考文献 (24)

《数据结构》是一种基于C程序建立的一种专业的算法技术,是一门基础的结构知识,是为了解决抽象问题设计的一种数学模型的算法,然后进行运行调试,以达到目的。这是一门基础课,在日常生活、学习中,运用的范围非常广泛,这要求我们能够掌握并应用。 本次课程设计目的在于检验学生在《数据结构》课程一学期中的学习成果,从而加深学生对所学知识的进一步理解与巩固。 本次课程设计过程中我们主要根据课本中的实现思想及算法编写程序,体现以课本知识的应用为主,在学习了线性表、栈、队列、二叉树、树和图等结构的基础上,以能够更加熟练的应用所学知识,并能更为深刻理解数据结构的内涵,熟悉它们各自的应用场合及方法。有些在平时做实验报告中没有掌握的内容在这次课程设计中都是先通过看课本学懂了,然后再在课程设计中加深印象,实现算法的应用和扩展。这次的课程设计的设计内容主要是通过实际的例子和程序来实现课本中所学习的算法的应用。我们主要做了建立二叉树以及对二叉树的遍历与求结点路径这个课题。 本文利用C语言编写程序,分别实现了先序建立二叉树的存储结构以及对二叉树的先序遍历、中序遍历、后序遍历以及对指定结点路径的输出。 树结构的应用主要模块:建立二叉树、对二叉树的不同方法进行遍历、求指定结点路径等,以及对指针数组的应用为基础对树结构的操作和应用。 几个功能模块已经通过全面的测试,能够很好的运行,达到了预期的效果。关键字:数据结构二叉树遍历结点路径

数据结构课程设计报告-二叉树根节点到指定节点的路径

数据结构课程设计报告-二叉树根节点到指定节点的路径 数据结构课程设计报告二叉树根节点到指定节点的路径——递归调用思想班级:__ 软件092________ 姓名:_ __________ 指导教师:__ 成绩:___________________ 信息工程学院2011 年 6 月17 日- 2 - 摘要(题目): 二叉树根节点到指定节点的路径 1.引言二叉树是n 个结点 的有穷个集合,它或者是空集(n=0),或者同时满足以下两个条件;(1)有且仅有一个称为根的结点;(2)其余结点分为两个互不相交的集合T1,T2,并且T1,T2,都是二叉树,分别称为根的左子树和右子树。二叉树形结构在客观世界中大量存在,如行政组织机构和人类社会的家谱关系等都可用二叉树结构形象地表示。在计算机应用领域,二叉树也被广泛地应用。例如在编译程序中,可用二叉树来表示源程序的语法结构;在数据库系统中,可用二叉树来表示组织信息;在计算机图形学中,可用二叉树来表示图像关系等。因此对二叉树的研究具有重要意义。2.需求分析利用一个简单的菜单,通过菜单项进行选择,实现和完成如下功能:用先序输入,建立二叉树存储结构、求指定结点的路径。对于建立二叉树存储结构,考虑到栈和队列的存储结构比较繁琐,从而定义一指针数组来一一存储该二叉树先序遍历过的结点,并对该结点进行判断是否为指定的目标结点,并进行输出等操作。 3.概要设计对二叉树采用链式存储结构,其结构定义如下:typedef struct

node{ DataType data; struct node *lchild,*rchild; }BinTNode,*BinTree; 每个结点中设置三个域,即值域data,左指针域*lchild 和右指针域*rchild。本程序分为6 大模块:全局变量定义、创建结构体、创建二叉链表存储表示、查找目标结点、求结点路径、主函数。(1)全局变量定义(2)创建结构体(3)创建二叉链表存储表示:定义二叉树的链式存储结构,输入数据生成二叉树。(4)查找目标结点:采用二叉链表作为存储结构,利用递归方法,对各个结点进行判断改结点是否在二叉树中。- 3 - (5)求结点路径:采用二叉链表作为存储结构,利用先序遍历二叉树方法以及指针数组的存储结构方法,对结点路径的遍历查找及输出。(6)主函数程序流程图重要函数有主函数int main()输入函数scanf()输出函数printf()二叉树的先序建立函数CreateBiTree()结点查找函数FindBT()求结点路径函数NodePath()4.详细设计(1)定义二叉树用链式存储结构存储二叉树。其中,了lchild 和rchild 是分别指向该结点左孩子和右孩子的指针,data 是数据元素的内容。定义二叉树结点值的类型为字符型且结点个数不超过100 个,具体实现方法如下:二叉树的根节点到指定节点的路径主程序代码输入函数输出函数 建立函数查找函数求路径函数- 4 - typedef struct node{ DataType data; struct node

打印二叉树的结点及层次

#include struct bnode{ char data; bnode *lchild,*rchild; }; int i=1; class tree { public: void inorder_printnode(bnode *&root,int i); void inorder(bnode *&root); void create(bnode *&root); bnode *root; }; void tree::inorder (bnode *&root){ if(root!=NULL){ inorder(root->lchild ); cout<data<<" " ; inorder(root->rchild ); } } void tree::create(bnode *&root){ char ch; cin>>ch; if(ch=='.') root=NULL; else { root=new bnode; root->data=ch; create(root->lchild); create(root->rchild); } } void tree::inorder_printnode(bnode *&root,int i){ if ( root != NULL ) { inorder_printnode(root->lchild,i+1); cout<<" ("<data <<","<rchild,i+1); }

} void main(){ tree M; M.create(M.root); M.inorder(M.root); M.inorder_printnode(M.root,i); }

(完整版)求二叉树结点路径.docx

求二叉树上结点的路径 要求在采用链式存储结构存储的二叉树上。以 T 指向根节点, p 指向任一给定的结点,编程实现如下功能: (1)建立一棵二叉树存储结构; (2)求二叉树的前序遍历序列; (3)求二叉树的中序遍历序列; (4)求二叉树的后序遍历序列; (5)求给定的结点的路径。 #include #include #include #include #define NodeNum 100 typedef struct node { char data; struct node *lchild,*rchild; }BTNode,*BTREE; void VISIT(char e)//--------- 输出语句 { printf("%c",e); } void BUILDBT(BTREE &T) //------ 利用前序遍历构建二叉树 { char ch; scanf("%c",&ch); if(ch==' ') T=NULL; else { T=(BTREE)malloc(sizeof(BTNode)); T->data=ch; BUILDBT(T->lchild); BUILDBT(T->rchild); } } void PREORDER(BTREE T)//------ 二叉树的前序遍历 { if(T!=NULL) { VISIT(T->data); PREORDER(T->lchild); PREORDER(T->rchild);

} } void INORDER(BTREE T) { //------ 二叉树的中序遍历 if(T!=NULL) { INORDER(T->lchild); VISIT(T->data); INORDER(T->rchild); } } void POSTORDER(BTREE T) { //------ 二叉树的后序遍历 if(T!=NULL) { POSTORDER(T->lchild); POSTORDER(T->rchild); VISIT(T->data); } } void AllPath(BTREE T,char item) { //----- 求得定路径结点BTREE STACK1[NodeNum],p=T; char STACK2[NodeNum],top=-1,flag; if(T!=NULL&&T->data!=item) do //---- 定义一个堆栈,保存所找到的结点//----- 假如所找的结点不是根结点 { while(p!=NULL) { STACK1[++top]=p; STACK2[top]=0; p=p->lchild; } p=STACK1[top]; flag=STACK2[top--]; if(flag==0) { STACK1[++top]=p; STACK2[top]=1; p=p->rchild; } else { if(p->data==item)

数据结构—— 树和二叉树知识点归纳

第6章树和二叉树 6.1 知识点概述 树(Tree)形结构是一种很重要的非线性结构,它反映了数据元素之间的层次关系和分支关系。在计算机科学中具有广泛的应用。 1、树的定义 树(Tree)是n(n≥0)个数据元素的有限集合。当n=0时,称这棵树为空树。在一棵非空树T中: (1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点。 (2)若n>1,除根结点之外的其余数据元素被分成m(m>0)个互不相交的集合T1,T2,…,Tm,其中每一个集合Ti(1≤i≤m)本身又是一棵树。树T1,T2,…,Tm称为这个根结点的子树。 2、树的基本存储结构 (1)双亲表示法 由于树中的每一个结点都有一个唯一确定的双亲结点,所以我们可用一组连续的 存储空间(即一维数组)存储树中的结点。每个结点有两个域:一个是data域,存放结点信息,另一个是parent域,用来存放双亲的位置(指针)。 (2)孩子表示法 将一个结点所有孩子链接成一个单链表形,而树中有若干个结点,故有若干个单 链表,每个单链表有一个表头结点,所有表头结点用一个数组来描述这种方法通常是把每个结点的孩子结点排列起来,构成一个单链表,称为孩子链表。 (3)双亲孩子表示法 双亲表示法是将双亲表示法和孩子表示法相结合的结果。其仍将各结点的孩子结点分别组成单链表,同时用一维数组顺序存储树中的各结点,数组元素除了包括结点本身的信息和该结点的孩子结点链表的头指针之外,还增设一个域,存储该结点双亲结点在数组中的序号。 (4)孩子兄弟表示法 这种表示法又称为树的二叉表示法,或者二叉链表表示法,即以二叉链表作为树的存储结构。链表中每个结点设有两个链域,分别指向该结点的第一个孩子结点和下一个兄弟(右兄弟)结点。 3、二叉树的定义 二叉树(Binary Tree)是个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个结点。 4、满二叉树 定义:在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的一棵二叉树称作满二叉树。 5、完全二叉树 定义:一棵深度为k的有n个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行编号,如果编号为i(1≤i≤n)的结点与满二叉树中编号为i的结点在二叉树中的位置相同,则这棵二叉树称为完全二叉树。完全二叉树的特点是:叶子结点只能出现在最下层和次下层,且最下层的叶子结点集中在树的左部。 6、二叉树的性质

习题树和二叉树

习题6树和二叉树 说明: 本文档中,凡红色字标出的题请提交纸质作业,只写题号和答案即可。 6.1 单项选择题 1. 2. A . 15 由于二叉树中每个结点的度最大为 2,所以二叉树是一种特殊的树,这种说法 A.正确 假定在一棵二叉树中, B . 16 C . 17 3. 按照二叉树的定义, A. 3 4. 按照二叉树的定义, A. 5 5. 6. 7. 8. B.错误 双分支结点数为15,单分支结点数为30个,则叶子结点数为 B 个。 D . 具有 B. 4 具有 B. 6 深度为5的二叉树至多有 A. 16 B. 32 47 3个结点的不同形状的二叉树有 _ C. 5 D. 6 3个不同数据结点的不同的二叉树有 C. 30 _C__个结点。 C. 31 D. 32 C 种。 C 种。 设高度为h 的二叉树上只有度为 0和度为 D. 10 2的结点,则此类二叉树中所包含的结点数至少为 B. 2h-1 C. 2h+1 m 个树叶,n 个结点,深度为h ,则__A__ B. h+m=2 n C. m=h-1 D. h+1 A. 2h 对一个满二叉树, A. n=h+m 任何一棵二叉树的叶结点在先序、中序和后序遍历序列中的相对次序 A.不发生改变 B.发生改变 如果某二叉树的前根次序遍历结果为 B. vwuts C. wuvts O D. n=2 h -1 A C.不能确定 D.以上都不对 stuwv ,中序遍历为uwtvs ,那么该二叉树的后序为 __C__。 D. wutsv 9. A. uwvts 10. 二叉树的前序遍历序列中,任意一个结点均处在其子女结点的前面,这种说法 正确 B.错误 11. 某二叉树的前序遍历结点访问顺序是 序遍历的结点访问顺序是 _D__。 A. bdgcefha B. gdbecfha 12. 在一非空二叉树的中序遍历序列中, A.只有右子树上的所有结点 C.只有左子树上的部分结点 abdgcefh ,中序遍历的结点访问顺序是 13. 如图6.1所示二叉树的中序遍历序列是 C. bdgaechf D. gdbehfca 根结点的右边 _A_。 B.只有右子树上的部分结点 D.只有左子树上的所有结点 B_。 C. dbaefcg D. defbagc 序遍 A. abcdgef 序列 B. dfebagc abdgcefh B. dgbaechf D. abcdefgh 为一棵二叉树上的两个结点, 前的条件是 B a 在b 的右方 a 是b 的祖先 a . C . 已知某二叉树的后序遍历序列是 B. deca b C. deab c D . a 是b 的子孙 dabec ,中序遍历序列是 D. cedba 16. A. acbe d 17.实现任意二叉树的后序遍历的非递归算法而不使用栈结构, 结构。 A.二叉链表 B.广义表存储结构 C.三叉链表 A. dgbaechf ,则其后 二叉树如图6.2所示,其中序遍历的 疋 D 。 B . a 在b 的左方 debac,它的前序遍历序列是 最佳方案是二叉树采用 D.顺序存储结构 C. 在中 C 存储

实现二叉树中所有节点左右子树的交换

数据结构课程设计 实验报告

题目名称:实现二叉树中所有节点左右子树的交换 学院:信息科学与工程学院 专业班级:计算机科学与技术 1003 班 姓名:叶成功 学号: 12081414 指导教师:陈国良教授李立三教授 日期: 2012年7月3日 目录 一、问题描述 (4) 二、基本要求 (4) 三、数据结构的设计 (4) 1、结点的数据结构 (5) 2、基本操作 (5) 四、软件模块结构图 (5) 五、程序设计思想 (6) 1、程序设计基本思想 (6) 2、程序设计基本思想 (7) 六、程序流程图 (7) 1、创建函数 (7) 2、前序遍历函数 (8) 3、中序遍历函数 (9) 4、后序遍历函数 (10) 5、层序遍历函数 (11) 6、左右子树交换函数 (13)

7、二叉树打印函数 (14) 8、遍历调用函数 (15) 9、菜单函数 (16) 10、主函数 (17) 七、源程序代码 (19) 八、调试分析 (25) 九、数据测试 (26) 1、主菜单界面 (27) 2、建立一棵有二十个结点的完全二叉树 (28) 3、打印二叉树 (28) 4、遍历二叉树 (28) 5、二叉树左右子树交换 (28) 6、交换后打印二叉树 (29) 7、交换后二叉树的遍历 (29) 8、退出程序 (29) 十、用户使用手册 (29) 十一、心得体会 (29)

一、问题描述 二叉树是一种常见的特殊的树型结构,在计算机领域有着极为广泛的应用。在二叉树的一些应用中,常常要求在树中查找具有某些特征的结点或者对树中全部结点逐一进行某种处理,这就提出了遍历二叉树。根据遍历的方向的不同,有前序遍历、中序遍历、后序遍历以及层序遍历。在本次课程设计中,要求学生通过编写程序完成对二叉树的一些操作,比如可以构造二叉树、打印二叉树、遍历二叉树以及对左右子树进行交换等等。 二、基本要求 要求:。构造一颗20个节点的完全二叉树或者20个节点以上的满二叉树。 实现如下步骤: (1)实现二叉树的构造过程,并打印出二叉树 (2)对该二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历; (3)将该二叉树的所有左右子树进行交换,得到新的二叉树,并打印出该二叉树; (4)对新获得的二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历。 三、数据结构的设计 由数据结构中二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,所以在本程序二叉树的构造是采用二叉链表的链式存储结构,链表中的结点应包含三个域:数据域和左、右孩子的指针域。这种存储结构可以方便二叉树的建立以及遍历。

实现二叉树中所有节点左右子树的交换

实现二叉树中所有节点左右子树的交换 IMB standardization office【IMB 5AB- IMBK 08- IMB 2C】

数据结构课程设计 实验报告 题目名称:实现二叉树中所有节点左右子树的交换学院:信息科学与工程学院 专业班级:计算机科学与技术1003班 姓名:叶成功 学号: 指导教师:陈国良教授李立三教授 日期:2012年7月3日 目录

一、问题描述 二叉树是一种常见的特殊的树型结构,在计算机领域有着极为广泛的应用。在二叉树的一些应用中,常常要求在树中查找具有某些特征的结点或者对树中全部结点逐一进行某种处理,这就提出了遍历二叉树。根据遍历的方向的不同,有前序遍历、中序遍历、后序遍历以及层序遍历。在本次课程设计中,要求学生通过编写程序完成对二叉树的一些操作,比如可以构造二叉树、打印二叉树、遍历二叉树以及对左右子树进行交换等等。

二、基本要求 要求:。构造一颗20个节点的完全二叉树或者20个节点以上的满二叉树。 实现如下步骤: (1)实现二叉树的构造过程,并打印出二叉树 (2)对该二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历; (3)将该二叉树的所有左右子树进行交换,得到新的二叉树,并打印出该二叉树; (4)对新获得的二叉树分别用层序、前序、中序和后序四种不同的方法进行遍历。 三、数据结构的设计 由数据结构中二叉树的定义可知,二叉树的结点由一个数据元素和分别指向其左、右子树的两个分支构成,所以在本程序二叉树的构造是采用二叉链表的链式存储结构,链表中的结点应包含三个域:数据域和左、右孩子的指针域。这种存储结构可以方便二叉树的建立以及遍历。 1、结点的数据结构 structnode { chardata; structnode*lchild,*rchild; } 2、基本操作 voidCreate(BiTNode**p) 初始条件:按照结点的结构体构造二叉树; 操作结果:构造一棵二叉树。 voidPreOrderTraverse(BiTreeT)

二叉树叶子结点个数计算

计算二叉树叶子结点 1.程序设计简介 已知一棵二叉树,求该二叉树中叶子结点的个数。 2.基本要求 (1)设计二叉树的二叉链表为存储结构 (2)设计求叶子结点个数的递归算法 (3)输入:一颗二叉树 (4)输出:二叉树中叶子结点的个数 3.实现提示 (1)存储设计 二叉树采用二叉链表为存储结构 (2)算法设计 求二叉树中叶子结点个数,即求二叉树的所有结点中左、右子树均为空的结点个数之和。可以将此问题转化为遍历问题,在遍历中“访问一个结点”时判断该结点是不是叶子,若是则将计数器累加。 4.源程序 #include

#include using namespace std; struct BiNode //二叉树的结点结构 { char data; BiNode *lchild, *rchild; }; class BiTree { public: BiTree( ); //构造函数,初始化一棵二叉树,其前序序列由键盘输入 ~BiTree(void); //析构函数,释放二叉链表中各结点的存储空间BiNode* Getroot(); //获得指向根结点的指针 void PreOrder(BiNode *root); //前序遍历二叉树 void BiTree::yezi(BiNode *root,int &n); private: BiNode *root; //指向根结点的头指针 BiNode *Creat( ); //有参构造函数调用 void Release(BiNode *root); //析构函数调用

}; BiTree::BiTree( ) { root = Creat( ); } BiTree::~BiTree(void) { Release(root); } BiNode* BiTree::Getroot( ) { return root; } void BiTree::PreOrder(BiNode *root) { if(root==NULL) return; else{ cout<data<<" ";

计算二叉树结点个数

#include #include #define maxlen 50 #define NULL 0 typedef struct node{ char data;//data域用来存放结点信息 struct node *lchild,*rchild;//lchild用来存放其左孩子的地址,rchild用来存放其右孩子的地址 }Bitree; Bitree *Q[maxlen];//定义指针队列 Bitree *creatBitree(){ char ch; int front=1,rear=0;//置空队列 Bitree *T,*S; T=NULL;//置空二叉树 ch=getchar(); while(ch!='#'){//以‘#’作为结束符 S=NULL;//当输入元素为空时,无需申请空间 if(ch!='@'){//当不是虚结点时 S=(Bitree *)malloc(sizeof(Bitree));//为所得元素申请内存 S->data=ch;//将元素值放入data域存储 S->lchild=S->rchild=NULL;//将其左右孩子置空 } rear++; Q[rear]=S;//将结点地址入队 if(rear==1){ T=S;}//输入的第一个元素为根结点 else{ if(S!=NULL&&Q[front]!=NULL) if(rear%2==0){ Q[front]->lchild=S;//能被2整除的rear位存储的皆为左孩子,将其与父节点连接 } else{ Q[front]->rchild=S;//不能被2整除的rear位存储的皆右左孩子,将其与父节点连接 } if(rear%2==1){ front++; } } ch=getchar(); } return T; }

求二叉树根到给定节点的路径设计报告

题目: 求二叉树根到给定节点的路径 摘要:本程序设计题要求出二叉树的根节点到给定节点的路径,我们利用二叉树的双亲存储表示法建立二叉树,然后在树的叶子节点中找到给定的节点,利用双亲指针找出该节点所有祖先并入栈,直至根节点,然后再让栈中元素依次出栈,得到二叉树到该节点的路径,使程序得以实现。 关键字:二叉树双亲指针栈路径

目录 1、题目要求------------------------------------------------------------------4 2、设计思想------------------------------------------------------------------4 3、系统完成功能及框图---------------------------------------------------4 4、界面设计------------------------------------------------------------------6 5、核心算法及说明---------------------------------------------------------8 6、结论------------------------------------------------------------------------10 7、后记------------------------------------------------------------------------11 8、附录------------------------------------------------------------------------11

数据结构二叉树习题含答案

第6章树和二叉树 1.选择题 (1)把一棵树转换为二叉树后,这棵二叉树的形态是()。 A.唯一的B.有多种 C.有多种,但根结点都没有左孩子D.有多种,但根结点都没有右孩子 (2)由3 个结点可以构造出多少种不同的二叉树?() A.2 B.3 C.4 D.5 (3)一棵完全二叉树上有1001个结点,其中叶子结点的个数是()。 A.250 B. 500 C.254 D.501 (4)一个具有1025个结点的二叉树的高h为()。 A.11 B.10 C.11至1025之间 D.10至1024之间(5)深度为h的满m叉树的第k层有()个结点。(1=

建立二叉树并求指定结点路径数据结构课程设计报告

**大学 电子与信息工程学院数据结构课程设计报告 ( 2010——2011年度第一学期) 课程名称:数据结构课程设计 题目:建立二叉树并求指定结点路径 院系:电信学院计算机系 班级:计算机08本(1) 姓名:** 学号:** 指导教师:** 成绩: 2010 年12月4日

成绩评定 一、指导教师评语 二、成绩 指导教师: 日期:年月日

[题目]建立二叉树并求指定结点路径 [问题描述]要求能够按先序遍历的次序输入二叉树的各个结点,并能够输出中序遍历的序列,以及指定结点的路径 [基本要求]分别建立二叉树存储结构的输入函数、输出中序遍历的函数,以及输出指定结点路径的函数 课程设计的需求和规格说明 1、定义二叉树的存储结构,每个结点中设置三个域,即值域、左指针域、右指针域。要建立二叉树T的链式存储结构,即建立二叉链表。根据输入二叉树结点的形式不同,建立的方法也不同,本系统采用先序序列递归建立二叉树,建立如下图所示的二叉树。应该在程序运行窗口的主控菜单后,先选择“1”并回车,紧接着在程序运行窗口中提示信息“输入二叉树的先序序列结点值:”之后,采用以下字符序列:ABC@@DE@G@@F@@@(以@替代空格)作为建立二叉树T的输入字符序列并回车,窗口出现:二叉树的链式存储结构建立完成! 图1 二叉树的图形结构 2、二叉树的遍历。本系统采用非递归中序遍历算法进行中序遍历,这意味着遍历右子树时不再需要保存当前层的根指针,可直接修改栈顶记录中的指针即可。需要在程序运行窗口的主控菜单中选择“2”并回车,程序运行窗口会出现以下中序遍历序列:该二叉树的中序遍历序列是: CBEGDFA 3、求二叉树的指定结点路径。在程序运行窗口的主控菜单中选择“3”并回车,在程序运行窗口中提示信息“输入要求路径的结点值:”输入“G”并回车,会得到结果为:→A→B→D→E→G如果输入“I”并回车,会得到结果为:没有要求的结点!

相关文档
最新文档