当前位置:文档之家› 东北大学计算机初试历年二叉树算法题目及解答

东北大学计算机初试历年二叉树算法题目及解答

东北大学计算机初试历年二叉树算法题目及解答
东北大学计算机初试历年二叉树算法题目及解答

[1996]设t为一棵二叉树的根结点地址指针,试设计一个非递归算法完成把二叉树中每个结点的左右孩子位置交换。

int swithLRChild(BiTree *t)

{ BiTree *stack[100] = {0};

int stack_length = 0;

if (NULL == t){

return 0;

}

stack[stack_length++] = t;

while (stack_length > 0){

//pop stack

BiTree *node = stack[stack_length - 1];

stack_length -= 1;

BiTree *temp = node->lchild;

node->lchild = node->rchild; node->rchild = temp;

if (NULL != node->rchild){ stack[stack_length++] = node->rchild;}

if (NULL != node->lchild){

stack[stack_length++] = node->lchild;

}

}

return 1;

}

[1998]一棵高度为K且有n个结点的二叉排序树,同时又是一棵完全二叉树存于向量t中,试设计删除树中序号为i且具有左右孩子的一个结点,而不使存储量增加保证仍为二叉排序树(不一定是完全二叉树)的算法。

//存数据的位置是从1的索引开始的,避免需要访问索引为0的空间,避免需要频繁的索引转换

void delNodeInSortedBiTree(int *sorted_bitree, int *last_index,int i)

{

//因为题目中描述具有左右孩子,所以直接从左孩子的最右边叶子节点开始

//分两种情况,左孩子没有右孩子,那么左孩子之后的节点都移动一个位子

//左孩子存在右孩子,则从右孩子的左孩子一直走,到叶子节点停止,因为是叶子节点//就不需要移动元素了

int del_node_index = 2*i;

if (2*del_node_index + 1 >= *last_index)

{

//左孩子只存在左子树

sorted_bitree[i] = sorted_bitree[del_node_index];

while (del_node_index*2 <= *last_index)

{

//后面的位置都往上移动

sorted_bitree[del_node_index] = sorted_bitree[2*del_node_index];

del_node_index *= 2;

}

sorted_bitree[del_node_index] = -1;

printf("last_index:%d\n", *last_index);

}

else

{

//移动到左孩子的右孩子

del_node_index = del_node_index*2 + 1;

while (2*del_node_index <= *last_index)

{

del_node_index *= 2;

}

//因为叶子节点,所以不需要移动

printf("r:%d rp:%d\n", sorted_bitree[i], sorted_bitree[del_node_index]);

sorted_bitree[0] = sorted_bitree[del_node_index];

sorted_bitree[del_node_index] = -1;

}

}

[2002]对以二叉链表存储的非空二叉树,从右向左依次释放所有叶子结点,释放的同时,把结点值存放到一个向量中。

要求:(1)用文字写出实现上述过程的基本思想.(2)写出算法*/

keyType XL[MAX];

Int iTmp=0;

void Ani_PreTravel(BiTree &T)

{

if(T)

{

if((T->lchild == NULL) && (T->rchild == NULL))

{

XL[iTmp++] == T->data;

free(T);

T = NULL;

}

else

{

Ani_PreTravel(T->rchild);

Ani_PreTravel(T->lchild);

}

}

}

[2002]设二叉排序树已经以二叉链表的形式存储在内存中,使用递归方法,求各结点的平衡因子并输出。

要求:(1)用文字写出实现上述过程的基本思想。

(2)写出算法*/

(1)分别求出左子树与右子树的深度,二者之差即为该结点的平衡因子。

(2)

//递归求二叉树的深度

int Depth(_PNode pNode)

{

if (NULL != pNode)

{

int ld = Depth(pNode->left);

int rd = Depth(pNode->right);

return ld > rd ? ld + 1: rd + 1;

}

return 0;

}

//递归求二叉树每个结点的平衡因子

void Balance(_PNode pNode)

{

if (NULL != pNode)

{

Balance(pNode->left);

Balance(pNode->right);

int hl = Depth(pNode->left);

int hr = Depth(pNode->right);

pNode->bf = hl - hr;

print(pNode->bf);//输出各节点的平衡因子

}

}

[2003]三、给出中序线索二叉树的结点结构,试编写在不使用栈和递归的情况下先序编历中序线索二叉树的算法。*/ 不懂!!!!!!!!!!!!!!

void InTraveseThr(BitTree thrt)

{

//遍历中序线索二叉树

p = thrt->lchild; //p指二叉树根结点

while (p!=thrt)

{

while(p->Ltag == 0)

p = p->lchild;

printf(p->data);

while(p->rtag == 1 && p->rchild != thrt)

{

p = p->rchild;

printf(p->data);

}//while

p = p->rchild;

}//while

}//InTraversethr

[2005]设二叉树中结点的数据域的值互不相同,试设计一个算法将数据域值为X 的结点的所有祖先结点的数据域打印出来。

//算法采用前序遍历的递归算法,在典型的遍历算法的参数表中增加了x,path[],level。X 代表要找的值;path[]记录从根到含有x节点的路径上所有的祖先节点,容量为maxsize,已经由#define声明;level传递当前访问节点的层次,初始值为1,用n来记录祖先节点的个数

int findAncestors(BTNode *t,char x,char path[],int level,int &n){

if(t!=NULL){

path[level-1]=t->data;

if(t->data==x){

n=level;

return 1;

}

if(findAncestors(t->lchild,x,path,level+1,n)){

return 1;

}

return findAncestors(t->rchild,x,path,level+1,n);

}else{

return 0;

}

}

[2006]设二叉树二叉链表为存储结构,编写计算二叉树tree中所有节点的平衡因子,同时返回二叉树tree中非叶结点个数的算法

与2002年一样,只是加上非叶结点个数。

[2007]设有n个结点的平衡二叉树的每个结点都标明了平衡因子b,设计结点存储结构,并编写求平衡二叉树的高度的算法

//结点存储结构为

typedef struct BTNode{

int data;//顶点信息

int bf;//顶点的平衡因子

struct BTNode *lchild;

struct BTNode *rchild;

};

int BalanceDepth(BTNode *bt){

int level=0;//代表节点层数

BTNode *p;

p=bt;

while(p){

level+=1;

if(p->bf>0){//如果当前结点的平衡因子是正数,则说明左子树高

p=p->lchild;

}else{//如果为负数,说明右子树高,如果为零,则左右子树一样高

p=p->rchild;

}

}

return level;//返回该平衡二叉树的高度

}

[2009]设某二叉树以二叉链表为存储结构,设计算法将二叉树中各结点的左右孩子位置互换。*/

方法一:可以用二叉树后序递归遍历框架来解此题,即对当前树的左子树进行交换,再对右子树进行交换,最后交换整棵树(从底部到上面)

void swap(BTNode *bt)

{

if(b!=NULL)

{

swap(b->lchild);

swap(b->rchild);

BTNode *temp=b->lchild;

b->lchild=b->rchild;

b->rchild=temp;

}

}

方法二:先序遍历

//这种通过返回树的方式,比较简便,可以借鉴

BTree *Exchange(BTree *p)//将p指针指向的二叉树的左右子树进行互换。

{

BTree *r;//定义一个指针,用来交换左右子树

if(p != NULL)//交换p结点的左右孩子

{

k++;

r= p->lc;

p->lc = p->rc;

p->rc = r;

p->lc = Exchange(p->lc);

p->rc = Exchange(p->rc);

}

return(p);

}

//这种方式,如果指针需要变化,需要在开始用BTree *s=p;指向树的指针需要进行替换,或者用引用型

void Exchange(BTree *s)//将s指针指向的二叉树的左右子树进行互换。

{

BTree *r;

if(s != NULL)//交换p结点的左右孩子

{

r= s->lc;

s->lc = s->rc;

s->rc = r;

Exchange(s->lc);

Exchange(s->rc);

}

}

[2009]已知一棵二叉树的前序序列和中序序列分别存于两个一维数组中,试编写算法建立该二叉树的二叉链表。*/

typedef char TElemType;

typedef struct BiTNode

{

TElemType data;

BiTNode *lchild, *rchild;

} BiTNode, *BiTree;

/* 当前要建立的子树bt的元素总数为n,*/

/* 元素在前序序列pre的起始位置为ps,*/

/* 元素在中序序列ino的起始位置为is */

void BuildBiTree(BiTree &bt, int ps, char *pre,int is, char *ino, int n)

{

int i,in1,count = 0;

if(n < 1)

return;

bt = (BiTree)malloc(sizeof(BiTNode));

bt->data = pre[ps];

bt->lchild = NULL;

bt->rchild = NULL;

//找出中序序列的中点

for(i = is;ino[i] != pre[ps];++i)

++count;

in1 = i;

BuildBiTree(bt->lchild,ps+1,pre,is,ino,count);

BuildBiTree(bt->rchild,ps+count+1,pre,in1+1,ino,n-1-count);

}

[2010]假设一个仅包含二元运算符的算术表达式以二叉链表形式存储在二叉树T 中,编写按后序遍历计算表达式值的算法

[2011]二叉树采用二叉链表作为存储结构。编写算法,求出二叉树中第i层和第i+1层叶子结点个数之和

[2016]求二叉树中指定节点所在的层数

[2017]编写算法,对一棵一孩子-兄弟链表表示的树的度

typedef struct TreeNode

{

TreeNode *child;

TreeNode *sibling;

int data;

}TreeNode;

//这是用了递归的思想,需要仔细体会

int GetChildeSiblingTreeDegree(TreeNode *root)

{

//如果当前树的根节点没有孩子和兄弟,那么,该树的度就是0

if (root->child == NULL && root->sibling == NULL)

{

return 0;

}

//如果该树只有兄弟,则该树的度就等效于对他的兄弟分支的子树求度

else if( root->sibling != NULL)

{

return GetChildeSiblingTreeDegree(root->sibling);

}

//如果该树只有孩子,那么先求出该根节点的度,然后再对它孩子分支子树求度,两者取较大者,即该树的度

else if(root->child != NULL)

{

int rootDegree = 1;

TreeNode *p = root->child;

while(p->sibling != NULL)

{

p = p->sibling;

rootDegree++;

}

int childTreeDegree = GetChildeSiblingTreeDegree(root->child);

return rootDegree > childTreeDegree ? rootDegree : childTreeDegree;

}

}

二叉树的各种算法

二叉树的各种算法.txt男人的承诺就像80岁老太太的牙齿,很少有真的。你嗜烟成性的时候,只有三种人会高兴,医生你的仇人和卖香烟的。 /*用函数实现如下二叉排序树算法: (1)插入新结点 (2)前序、中序、后序遍历二叉树 (3)中序遍历的非递归算法 (4)层次遍历二叉树 (5)在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6)交换各结点的左右子树 (7)求二叉树的深度 (8)叶子结点数 Input 第一行:准备建树的结点个数n 第二行:输入n个整数,用空格分隔 第三行:输入待查找的关键字 第四行:输入待查找的关键字 第五行:输入待插入的关键字 Output 第一行:二叉树的先序遍历序列 第二行:二叉树的中序遍历序列 第三行:二叉树的后序遍历序列 第四行:查找结果 第五行:查找结果 第六行~第八行:插入新结点后的二叉树的先、中、序遍历序列 第九行:插入新结点后的二叉树的中序遍历序列(非递归算法) 第十行:插入新结点后的二叉树的层次遍历序列 第十一行~第十三行:第一次交换各结点的左右子树后的先、中、后序遍历序列 第十四行~第十六行:第二次交换各结点的左右子树后的先、中、后序遍历序列 第十七行:二叉树的深度 第十八行:叶子结点数 */ #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0

#define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int KeyType; #define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量 #define MAXQSIZE 100 typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;//左右孩子指针 } BiTNode,*BiTree; Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree &p) { if(!T){p=f;return FALSE;} else if(key==T->data){p=T;return TRUE;} else if(keydata)return SearchBST(T->lchild,key,T,p); else return(SearchBST(T->rchild,key,T,p)); } Status InsertBST(BiTree &T,ElemType e) { BiTree s,p; if(!SearchBST(T,e,NULL,p)) { s=(BiTree)malloc(sizeof(BiTNode)); s->data=e;s->lchild=s->rchild=NULL; if(!p)T=s; else if(edata)p->lchild=s; else p->rchild=s; return TRUE; } else return FALSE; } Status PrintElement( ElemType e ) { // 输出元素e的值 printf("%d ", e ); return OK; }// PrintElement

2013年民事诉讼法司考真题及详解

2013年民事诉讼法司考真题及详解

2013 17、根据2012年修改的《民事诉讼法》,关于公益诉讼的表述,下列哪一选项是错误的?【2013-35】() A.公益诉讼规则的设立,体现了依法治国的法治理念 B.公益诉讼的起诉主体只限于法律授权的机关或团体 C.公益诉讼规则的设立,有利于保障我国经济社会全面协调发展 D.公益诉讼的提起必须以存在实际损害为前提 【正确答案】 D 【答案解析】本题考核公益诉讼。《民事诉讼法》第55条规定,对污染环境、侵害众多消费者合法权益等损害社会公共利益的行为,法律规定的机关和有关组织可以向人民法院提起诉讼。 选项A说法正确。依法治国,就是广大人民群众在党的领导下,依照宪法和法律的规定,通过各种途径和形式管理国家事务,管理经济文化事业,管理社会事务,保证国家各项工作都依法进行,逐步实现社会主义民主的制度化、法律化,使这种制度和法律不因领导人的改变而改变,不因领导人看法和注意力的改变而改变。公益诉讼规则的设立,体现了依法治国的法治理念。 选项B说法正确。公益诉讼的起诉主体只限于法律规定的机关和有关组织。 选项C说法正确,选项D说法错误。建立公益诉讼制度是为了保护公共利益或者恢复、补偿受到减损的公益利益,或者是虽然没有公共利益受到侵害或减损的事实,但是有一定的法律秩序和道德秩序需要诉讼保护时,都可以提起公益诉讼。因此,公益诉讼规则的设立,

有利于保障我国经济社会全面协调发展;公益诉讼的提起不以存在实际损害为前提。 18、执法为民是社会主义法治的本质要求,据此,法院和法官应在民事审判中遵守诉讼程序,履行释明义务。下列哪一审判行为符合执法为民的要求?【2013-36】() A.在李某诉赵某的欠款纠纷中,法官向赵某释明诉讼时效,建议赵某提出诉讼时效抗辩 B.在张某追索赡养费的案件中,法官依职权作出先予执行裁定 C.在杜某诉阎某的离婚案件中,法官向当事人释明可以同时提出离婚损害赔偿 D.在罗某诉华兴公司房屋买卖合同纠纷中,法官主动走访现场,进行勘察,并据此支持了罗某的请求 【正确答案】 C 【答案解析】本题考核对执法为民与法官释明义务的理解。 选项A错误。《最高人民法院关于审理民事案件适用诉讼时效制度若干问题的规定》第3条规定,当事人未提出诉讼时效抗辩,人民法院不应对诉讼时效问题进行释明及主动适用诉讼时效的规定进行裁判。 选项B错误。根据《民事诉讼法》第106条的规定,先予执行必须依申请进行,法院不能依职权作出。 选项D错误。《民事诉讼法》第64条规定,当事人对自己提出的主张,有责任提供证据。当事人及其诉讼代理人因客观原因不能自行收集的证据,或者人民法院认为审理案件需要的证据,人民法院应当调查收集。人民法院应当按照法定程序,全面地、客观地审查核实证据。据此可知,当事人应当对自己提出的主张提供证据,法院不应当主动介入案件事实的调查,否则会丧失中立性。

实验三 二叉树的基本操作实现及其应用

二叉树的基本操作实现及其应用 一、实验目的 1.熟悉二叉树结点的结构和对二叉树的基本操作。 2.掌握对二叉树每一种操作的具体实现。 3.学会利用递归方法编写对二叉树这种递归数据结构进行处理的算法。 4.会用二叉树解决简单的实际问题。 二、实验内容 设计程序实现二叉树结点的类型定义和对二叉树的基本操作。该程序包括二叉树结构类型以及每一种操作的具体的函数定义和主函数。 1 按先序次序建立一个二叉树, 2按(A:先序 B:中序 C:后序)遍历输出二叉树的所有结点 以上比做,以下选做 3求二叉树中所有结点数 4求二叉树的深度 三、实验步骤 ㈠、数据结构与核心算法的设计描述 /* 定义DataType为char类型 */ typedef char DataType; /* 二叉树的结点类型 */ typedef struct BitNode { DataType data; struct BitNode *lchild,*rchild; }*BitTree; 相关函数声明: 1、/* 初始化二叉树,即把树根指针置空 */ void BinTreeInit(BitTree *BT) { BT=(BitTree)malloc(sizeof(BitNode)); BT->data=NULL; cout<<"二叉树初始化成功!"<>ch; if(ch=='#') BT=NULL; else { if(!(BT=(BitTree)malloc(sizeof(BitNode)))) exit(0);

2002-2011年司法考试民事诉讼法历年真题解析——单项选择题

2002-2011年司法考试民事诉讼法历年真题解析——单项选择题(2011年) 35.关于民事诉讼法的性质,下列哪一说法是正确的?()(2011年卷三单选第35题) A.根据其调整的社会关系,民事诉讼法是程序法 B.根据其在法律体系中的地位,民事诉讼法是程序法 C.根据其规定的内容,民事诉讼法是程序法 D.根据公法与私法的划分标准,民事诉讼法是程序法 【答案】C 【考点】民事诉讼法的性质 【解析】选项A错误。从民事诉讼法调整的社会关系看,民事诉讼法是部门法。 选项B错误。从民事诉讼法在我国社会主义法律体系中的地位看,民事诉讼法是基本法。 选项C正确,选项D错误。从民事诉讼法的内容看,民事诉讼法是程序法。 36.关于民事仲裁与民事诉讼的区别,下列哪一选项是正确的?()(2011年卷三单选第36题) A.具有给付内容的生效判决书都具有执行力,具有给付内容的生效裁决书没有执行力 B.诉讼中当事人可以申请财产保全,在仲裁中不可以申请财产保全 C.仲裁不需对案件进行开庭审理,诉讼原则上要对案件进行开庭审理 D.仲裁机构是民间组织,法院是国家机关 【答案】D 【考点】民事仲裁与民事诉讼的区别 【解析】选项A错误。《仲裁法》第六十二条规定,当事人应当履行裁决。一方当事人不履行的,另一方当事人可以依照民事诉讼法的有关规定向人民法院申请执行。受申请的人民法院应当执行。据此可知,具有给付内容的生效裁决书也具有执行力。 选项B错误。《仲裁法》第二十八条规定,一方当事人因另一方当事人的行为或者其他原因,可能使裁决不能执行或者难以执行的,可以申请财产保全。当事人申请财产保全的,仲裁委员会应当将当事人的申请依照民事诉讼法的有关规定提交人民法院。据此可知,在仲裁中,也可以申请财产保全。 选项C错误。《仲裁法》第三十九条规定,仲裁应当开庭进行。当事人协议不开庭的,仲裁庭可以根据仲裁申请书、答辩书以及其他材料作出裁决。据此可知,仲裁原则上也是应当开庭审理。

二叉树遍历算法的实现

二叉树遍历算法的实现 题目:编制二叉树遍历算法的实现的程序 一.需求分析 1.本演示程序中,二叉树的数据元素定义为非负的整型(unsigned int)数据,输 入-1表示该处没有节点 2.本演示程序输入二叉树数据均是按先序顺序依次输入 3.演示程序以用户和计算机对话方式执行,即在计算机终端上显示“提示信息” 之后,由用户在键盘上输入演示程序中规定的运算命令;相应的输入数据和运 算结果显示在其后 4.本实验一共包括三个主要程序,分别是:1)二叉树前序,中序,后序遍历递归 算法实现2)二叉树前序中序遍历非递归算法实现3)二叉树层次遍历算法实现 5.本程序执行命令包括:1)构建二叉树2)二叉树前序递归遍历3)二叉树中序 递归遍历4)二叉树后序递归遍历5)二叉树前序非递归遍历6)二叉树中序非 递归遍历7)二叉树层次遍历 6.测试数据 (1)7 8 -1 9 10 -1 -1 -1 6 11 -1 -1 12 13 -1 -1 14 -1 -1 (2)1 -1 -1 (3)7 8 -1 -1 9 -1 -1 二.概要设计 1.为实现二叉树的遍历算法,我们首先给出如下抽象数据类型 1)二叉树的抽象数据类型 ADT BiTree{ 数据对象D:D是具有相同特性的数据元素的集合 数据关系R: 若D=Φ,则R=Φ,称BiTree是空二叉树; 若D≠Φ,则R={H},H是如下二元关系: (1)在D中存在唯一的成为根的数据元素root,它在关系H下无前驱; (2)若D-{H}≠Φ,则存在D-{root}={D1,D r},且D1∩D r=Φ (3)若D1≠Φ,则D1中存在唯一的元素x1,∈H,且存在D1上的 关系H1?H;若Dτ≠Φ,则D r中存在唯一的元素x r,∈ H,且存在D r上的关系H r?H;H={,,H1,H r}; (4)(D1,{H1})是符合本定义的二叉树,成为根的左子树,(D r,{H r})是 一颗符合本定义的二叉树,成为根的右字树。 基本操作P: InitBiTree(&T); 操作结果:构造空二叉树 DestroyBiTree(&T) 初始条件;二叉树存在 操作结果:销毁二叉树 CreateBiTree(&T,definition);

设计一个完整的程序,实现二叉树的各种算法

实验6 实验目的: 1、掌握二叉树的所有算法 2、熟悉计算机英语和术语 实验步骤: 1、二叉树算法的模拟 2、完型填空 3、翻译 具体要求: 一、设计一个完整的程序,实现二叉树的各种算法 要求:/*用函数实现如下二叉排序树算法: (1)插入新结点 (2)前序、中序、后序遍历二叉树 (3)中序遍历的非递归算法 (4)层次遍历二叉树 (5)在二叉树中查找给定关键字(函数返回值为成功1,失败0) (6)交换各结点的左右子树 (7)求二叉树的深度 (8)叶子结点数 输入: 第一行:准备建树的结点个数n 第二行:输入n个整数,用空格分隔 第三行:输入待查找的关键字 第四行:输入待查找的关键字 第五行:输入待插入的关键字 输出: 第一行:二叉树的先序遍历序列 第二行:二叉树的中序遍历序列 第三行:二叉树的后序遍历序列 第四行:查找结果 第五行:查找结果 第六行~第八行:插入新结点后的二叉树的先、中、序遍历序列第九行:插入新结点后的二叉树的中序遍历序列(非递归算法) 代码: #include "stdio.h" #include "malloc.h" #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status; typedef int KeyType;

#define STACK_INIT_SIZE 100 // 存储空间初始分配量 #define STACKINCREMENT 10 // 存储空间分配增量 #define MAXQSIZE 100 typedef int ElemType; typedef struct BiTNode{ ElemType data; struct BiTNode *lchild,*rchild;//左右孩子指针 } BiTNode,*BiTree; Status SearchBST(BiTree T,KeyType key,BiTree f,BiTree &p) { if(!T){p=f;return FALSE;} else if(key==T->data){p=T;return TRUE;} else if(keydata)return SearchBST(T->lchild,key,T,p); else return(SearchBST(T->rchild,key,T,p)); } Status InsertBST(BiTree &T,ElemType e) { BiTree s,p; if(!SearchBST(T,e,NULL,p)) { s=(BiTree)malloc(sizeof(BiTNode)); s->data=e;s->lchild=s->rchild=NULL; if(!p)T=s; else if(edata)p->lchild=s; else p->rchild=s; return TRUE; } else return FALSE; } Status PrintElement( ElemType e ) { // 输出元素e的值 printf("%d ", e ); return OK; }// PrintElement Status PreOrderTraverse( BiTree T, Status(*Visit)(ElemType) ) { // 前序遍历二叉树T的递归算法,对每个数据元素调用函数Visit。 //补全代码,可用多个语句

民事诉讼法历年真题精选2及答案解析

民事诉讼法历年真题精选2及答案解析 选择 1. 社会主义法治的价值追求是公平正义,因此必须坚持法律面前人人平等原则。下列哪一民事诉讼基本原则最能体现法律面前人人平等原则的内涵?()(2014年)A: 检察监督原则 B: 诚实信用原则 C: 当事人诉讼权利平等原则 D: 同等原则和对等原则 2. 依法治国要求树立法律权威,依法办事,因此在民事纠纷解决的过程中,各方主体都须遵守法律的规定。下列哪一行为违背了相关法律?()(2014年) A: 法院主动对确有错误的生效调解书启动再审 B: 派出所民警对民事纠纷进行调解 C: 法院为下落不明的被告指定代理人参加调解 D: 人民调解委员会主动调解当事人之间的民间纠纷 3. 根据《民事诉讼法》规定的诚信原则的基本精神,下列哪一选项符合诚信原则?()(2014年) A: 当事人以欺骗的方法形成不正当诉讼状态 B: 证人故意提供虚假证言 C: 法院根据案件审理情况对当事人提供的证据不予采信 D: 法院对当事人提出的证据任意进行取舍或否定 4. 在一起侵权诉讼中,原告申请由其弟袁某(某大学计算机系教授)作为专家辅助人出庭对专业技术问题予以说明。下列哪一表述是正确的?()(2014年) A: 被告以袁某是原告的近亲属为由申请其回避,法院应批准 B: 袁某在庭上的陈述是一种法定证据 C: 被告可对袁某进行询问 D: 袁某出庭的费用,由败诉方当事人承担 5. 关于管辖,下列哪一表述是正确的?()(2014年) A: 军人与非军人之间的民事诉讼,都应由军事法院管辖,体现了专门管辖的原则B: 中外合资企业与外国公司之间的合同纠纷,应由中国法院管辖,体现了维护司法主权的原则 C: 最高法院通过司法解释授予部分基层法院专利纠纷案件初审管辖权,体现了平衡法院案件负担的原则 D: 不动产纠纷由不动产所在地法院管辖,体现了管辖恒定的原则 6. 赵洪诉陈海返还借款100元,法院决定适用小额诉讼程序审理。关于该案的审理,下列哪一选项是错误的?()(2014年) A: 应在开庭审理时先行调解 B: 应开庭审理,但经过赵洪和陈海的书面同意后,可书面审理 C: 应当庭宣判 D: 应一审终审 7. 关于第三人撤销之诉,下列哪一说法是正确的?()(2014年) A: 法院受理第三人撤销之诉后,应中止原裁判的执行 B: 第三人撤销之诉是确认原审裁判错误的确认之诉

二叉树的遍历算法实验报告

二叉树实验报告 09信管石旭琳 20091004418 一、实验目的: 1、理解二叉树的遍历算法及应用 2、理解哈夫曼树及其应用。 3、掌握哈夫曼编码思想。 二、实验内容: 1、建立二叉树二叉链表 2、实现二叉树递归遍历算法(中序、前序、后序) 3、求二叉树高度 4、求二叉树结点个数 5、求二叉树叶子个数 6、将序号为偶数的值赋给左子树 三、主要程序: #include #include typedef int ElemType; struct BiTNode { ElemType data; struct BiTNode *lch,*rch; }BiTNode,*BiTree; struct BiTNode *creat_bt1(); struct BiTNode *creat_bt2(); void preorder (struct BiTNode *t); void inorder (struct BiTNode *t); void postorder (struct BiTNode *t); void numbt (struct BiTNode *t); int n,n0,n1,n2; void main() { int k; printf("\n\n\n"); printf("\n\n 1.建立二叉树方法1(借助一维数组建立)"); printf("\n\n 2.建立二叉树方法2(先序递归遍历建立)"); printf("\n\n 3.先序递归遍历二叉树"); printf("\n\n 4.中序递归遍历二叉树"); printf("\n\n 5.后序递归遍历二叉树"); printf("\n\n 6.计算二叉树结点个数"); printf("\n\n 7.结束程序运行");

二叉树的基本操作实验

实验三二叉树的基本运算 一、实验目的 1、使学生熟练掌握二叉树的逻辑结构和存储结构。 2、熟练掌握二叉树的各种遍历算法。 二、实验内容 [问题描述] 建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列; 3. 求二叉树的深度/结点数目/叶结点数目;(选做) 4. 将二叉树每个结点的左右子树交换位置。(选做) [基本要求] 从键盘接受输入(先序),以二叉链表作为存储结构,建立二叉树(以先序来建立), [测试数据] 如输入:ABCффDEфGффFффф(其中ф表示空格字符) 则输出结果为 先序:ABCDEGF 中序:CBEGDFA 后序:CGEFDBA 层序:ABCDEFG [选作内容] 采用非递归算法实现二叉树遍历。 三、实验前的准备工作 1、掌握树的逻辑结构。 2、掌握二叉树的逻辑结构和存储结构。 3、掌握二叉树的各种遍历算法的实现。 一实验分析 本次试验是关于二叉树的常见操作,主要是二叉树的建立和遍历。二叉树的遍历有多种方法,本次试验我采用递归法,递归法比较简单。 二概要设计 功能实现

1.int CreatBiTree(BiTree &T) 用递归的方法先序建立二叉树, 并用链表储存该二叉树 2.int PreTravel(BiTree &T) 前序遍历 3. int MidTravel(BiTree &T) 中序遍历 4.int PostTravel(BiTree &T) 后序遍历 5.int Depth(BiTree &T) //计算树的深度 6.int howmuch(BiTree T,int h) 采用树节点指针数组,用于存放遍历到的元素地址,如果有左孩子,存入地址,j加一,否则没操作,通过访问数组输出层次遍历的结果。k计算叶子数,j为总节点。 7. int exchang(BiTree &T) 交换左右子树,利用递归,当有左右孩子时才交换 三详细设计 #include #include typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree;

《民事诉讼法》试题及答案

《民事诉讼法》试题及答案(A)作者:蔡全义*宪丰 一、单选题(共10小题,每小题有4个选项,其中只有一个是正确的,请将正确答案的序号填在括号内。每小题2分,共20分。) 1、在生效判决执行过程中,被执行人向人民法院提供担保,并经申请执行人同意的,人民法院可以( B )。 A.裁定暂缓执行B.决定暂缓执行 C.裁定中止执行D.决定中止执行 2、外国法院对中华人民共和国公民、法人和其他组织的民事诉讼权利加以限制的,中华人民共和国对该国公民、企业和组织的民事诉讼权利实行(B )。A.平等原则 B.对等原 则 C.互惠原则 D.互利原则 3、某甲向人民法院起诉请求解除与某乙之间的收养关系,一审法院判决不准解除。某甲不服一审法院判决,向上一级法院提起了上诉,在上诉后的第5天,某甲死于车祸。此案应如何处理?( C ) A.由一审人民法院终结诉 讼 B.由一审人民法院驳回上诉 C.由二审人民法院终结诉 讼 D.由二审人民法院驳回上诉 4、李某于6月10日接到判决书,6月15日当事人所在地发生水灾,交通断绝,6月23日方消除障碍。6月24日当事人向人民法院申请顺延上诉期限,经法院审查,决定准许,顺延后的上诉期限应截止到(C )。 A.7月1日 B.7月2日C.7月3日 D.7月4日 5、当事人向人民法院申请保全证据,不得迟于举证期限届满前(A )。 A.七日B.六日C.五日D.十四日 6、当事人在再审程序中提供新的证据的,应当在(A )提出。A.申请再审时B.再 审审理时 C.再审审理前D.再 审判决前 7、下列哪种案件的生效判决、 裁定,当事人可以申请再审?( A ) A.对不予受理、驳回起诉的裁 定 B.解除婚姻关系的判决 C.依照再审程序审理后维持原 判的案件 D.按照公示催告程序审理的案 件 8、当事人、法定代理人可以委 托(B )作为诉讼代理人。 A.一至三人 B.一至二人 C.二至三人D.三人 9、在认定财产无主案件中,公 告期间有人对财产提出请求,人 民法院应当( C )。 A.裁定中止原特别程 序 B.按再审程序审理 C.裁定终结特别程序,告知申 请人另行起诉 D.重新立案,和原案合并审理 10、简易程序的审理期限为( B )。 A.三个月,可以延长 B.三 个月,不得延长 C.六个月,不得延长 D.六 个月,可以延长 二、多项选择题(共10小题, 每小题有4个选项,其中只有两 个或两个以上选项是正确答案, 请将正确答案的序号填在题后 的括号内。每小题2分,共20 分。) 1、下列对妨害民事诉讼的强制 措施,应当用决定书的是( C D )。 A.训诫B.拘传C.罚 款D.拘留 2、甲公司与乙公司货款纠纷一 案,经人民法院主持调解,双方 达成调解协议,乙公司应当在调 解书生效后7日内向甲公司支付 所拖欠的货款210万元,其余责 任互相不再追究。该调解书经过 双方签收后,即产生以下法律效 力(A C D)。 A.甲公司与乙公司之间的货款 纠纷消灭 B.甲公司与乙公司的买卖关系 消灭 C.任何一方当事人不得反悔, 就该货款纠纷再行起诉 D.乙公司拒绝支付210万元货 款时,甲公司有权申请法院强制 执行 3、赵亚委托陈律师向区法院起 诉与其在德国留学多年不回的 中国籍丈夫王利离婚,王利委托 江律师代为诉讼与接受诉讼文 书。在诉讼过程中,区法院可以 适用(A D )的方式,向王利送 达诉讼文书。 A.向王利的代理人江律师送 达 B.向赵亚的代理人陈律师送达, 并转交王利 C.向赵亚送达并转交王利 D.由中国驻德国使、领馆代为 送达 4、审判监督程序的提起,不可 以基于( B D )。 A.当事人申请再审B.各 级人民法院院长直接决定再审 C.最高人民检察院对各级人民 法院的生效裁判提出抗诉 D.地方各级人民检察院对同级 人民法院的生效裁判提出抗诉 5、债权人不应向(A B D ) 申请宣告债务人破产还债。 A.破产财产所在地法院B.债 务人主管部门所在地法院 C.债务人所在地法院D.债 权人会议与清算组依照法律规 定约定的法院 6、邵阳地区甲县某工厂排出的 工业废水流向乙县污染乙县农 户A承包的农田、鱼塘,造成农 作物和鱼的死亡,A可以在( B C )法院起诉。 A.由中级人民法院指定B.甲 县人民法院 C.乙县人民法院D.邵 阳地区中级人民法院 7、当事人对人民法院委托的鉴 定部门作出的鉴定结论有异议 申请重新鉴定,提出证据证明存 在下列情况之一的,人民法院应 予准许:(A B C D )。 A.鉴定机构或者鉴定人员不具 备相关的鉴定资格的 B.鉴定程序严重违法的 C.鉴定结论证明显依据不足的 D.经过质证认定不能作为证据 使用的其他情形 8、人民法院就数个证据对同一 事实的证明力,可以依照下列原 则认定:(B C)。 A.实物证据的证明力一般大于 言词证据 B.原始证据的证明力一般大于 传来证据 C.直接证据的证明力一般大于 间接证据 D.本证的证明力一般大于反证 9、下列事实,当事人无需举证 证明:(B C D )。 A.关于回避的事实 B.自 然规律及定理 C.众所周知的事实 D.已 为有效公证文书所证明的事实 10、根据《民事诉讼法》规定, 人民法院适用普通程序审理的 案件,应当在立案之日起6个月 内审结,这6个月的计算不包括 ( B C)。 A.调解书、判决送达的期 间B.公告期间 C.审理当事人提出的管辖权异 议的期间 D.法院主动调查取证的期间 三、判断分析题。(判断正误, 并说明理由。 每小题5分,共10分。) 1、当事人超过诉讼时效期间起 诉的,人民法院不应受理。 错误。根据最高人民法院关于适 用《中华人民共和国民事诉讼 法》若干问题的意见的规定,当 事人超过诉讼时效期间起诉的, 人民法院应予受理。受理后查明 无中止、中断、延长事由的,判 决驳回其诉讼请求。 2、精神病人不能成为民事诉讼 当事人。 错误。诉讼权利能力是成为民事

东北大学计算机初试历年二叉树算法题目及解答

[1996] 设t 为一棵二叉树的根结点地址指针,试设计一个非递归算法完成把二叉树中每个结点的左右孩子位置交换。 int swithLRChild(BiTree *t) { BiTree *stack[100] = {0}; int stack_length = 0; if (NULL == t){ return 0; } stack[stack_length++] = t; while (stack_length > 0){ //pop stack BiTree *node = stack[stack_length - 1]; stack_length -= 1; BiTree *temp = node ->lchild; node->lchild = node ->rchild; node->rchild = temp; if (NULL != node ->rchild){ stack[stack_length++] = node ->rchild;} if (NULL != node ->lchild){ stack[stack_length++] = node ->lchild; } } return 1; } [1998]一棵高度为K 且有n个结点的二叉排序树,同时又是一棵完全二叉树存于向量t 中,试设计删除树中序号为i 且具有左右孩子的一个结点,而不使存储量增加保证仍为二叉排序树(不一定是完全二叉树)的算法。 //存数据的位置是从 1 的索引开始的,避免需要访问索引为0 的空间,避免需要频繁的索引 转换 void delNodeInSortedBiTree(int *sorted_bitree, int *last_index,int i) { //因为题目中描述具有左右孩子,所以直接从左孩子的最右边叶子节点开始//分两种情况,左孩子没有右孩子,那么左孩子之后的节点都移动一个位子//左孩子存在右孩子,则从右孩子的左孩子一直走,到叶子节点停止,因为是叶子节点//就不需要移动元素了 int del_node_index = 2*i; if (2*del_node_index + 1 >= *last_index)

实验10 二叉树的基本操作

浙江大学城市学院实验报告 课程名称数据结构 实验项目名称实验十二叉树的基本操作 学生姓名专业班级学号 实验成绩指导老师(签名)日期 一.实验目的和要求 1、掌握二叉树的链式存储结构。 2、掌握在二叉链表上的二叉树操作的实现原理与方法。 3、进一步掌握递归算法的设计方法。 二.实验内容 1、按照下面二叉树二叉链表的存储表示,编写头文件binary_tree.h,实现二叉链表的定义与基本操作实现函数;编写主函数文件test10.cpp,验证头文件中各个操作。 二叉树二叉链表存储表示如下: typedef struct BiTNode { TElemType data ; struct BiTNode *lchild , *rchild ; }BiTNode,*BiTree ; 基本操作如下: ①void InitBiTree(BiTree &T ) //初始化二叉树T ②void CreateBiTree(BiTree &T) //按先序遍历序列建立二叉链表T ③bool BiTreeEmpty (BiTree T); //检查二叉树T是否为空,空返回1,否则返回0 ④int BiTreeDepth(BiTree T); //求二叉树T的深度并返回该值 ⑤void PreOrderTraverse (BiTree T); //先序遍历二叉树T ⑥void InOrderTraverse (BiTree T); //中序遍历二叉树T ⑦void PostOrderTraverse (BiTree T); //后序遍历二叉树T ⑧void DestroyBiTree(BiTree &T) //销毁二叉树T

二叉树排序算法

实验报告 课程名称:数据结构实验课程 实验四、串的基本操作练习 一、实验目的 1. 掌握二叉树的存储实现 2. 掌握二叉树的遍历思想 3. 掌握二叉树的常见算法的程序实现 二、实验环境 VC++6.0 三、实验内容 1.输入字符序列,建立二叉树的二叉链表结构。(可以采用先序序列) 2.实现二叉树的先序、中序、后序的递归遍历算法。 3.实现二叉树的先序、中序、后序的非递归遍历算法。 4.求二叉树的高度。 5.求二叉树的结点个数。 6.求二叉树的叶子结点的个数。 四、实验要求: 分别编写实现上述算法的子函数,并编写一个主函数,在主函数中设计一个简单的菜单,分别调用上述子函数。 五、实验步骤和结果 1.打开vc,新建文本,命名二叉树算法,编写代码。 2.编写代码: #include #include #define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 int i=0; /*--------------------------------------建立堆栈------------------------------------------*/ typedef struct BiTNode { char data; struct BiTNode *lchild,*rchild; } BiTNode,*BiTree;//树类型 typedef struct SqStack {

BiTNode *base; BiTNode *top; int stacksize; } SqStack;//栈类型 void InitStack(SqStack *S)//创建二叉树 { S->base=(BiTNode*)malloc(STACK_INIT_SIZE*sizeof(BiTNode)); S->top=S->base; S->stacksize=STACK_INIT_SIZE; } void Push(SqStack *S,BiTNode e)//进栈 { if(S->top - S->base >= S->stacksize)//如果栈空间不足 { S->base=(BiTNode*)realloc(S->base,(S->stacksize+STACKINCREMENT)*sizeof(B iTNode)); S->top=S->base+S->stacksize; S->stacksize+=STACKINCREMENT; } *(S->top)=e; S->top++; } BiTNode Pop(SqStack *S)//出栈 { S->top --; return *S->top; } int StackEmpty(SqStack *S)//判断栈是否非空 { if(S->top == S->base ) return 1; else return 0; } /*---------------------------------------------递归部分-------------------------------------------*/

二叉树的各种遍历算法及其深度算法

二叉树的算法: 用扩展先序遍历序列创建二叉树; 递归遍历算法 中序非递归遍历层次遍历 二叉树深度的算法 实现代码如下: #include #include #include typedef struct Node { char data; struct Node *LChild; struct Node *RChild; }BitNode,*BitTree; typedef struct CSNode { char data; struct CSNode *fch, *nextSib; }CSNode, *CSTree; void CreatBiTree(BitTree *bt)//用扩展先序遍历序列创建二叉树,如果是#当前树根置为空,否则申请一个新节点// { char ch; ch=getchar(); if(ch=='#')*bt=NULL; else { *bt=(BitTree)malloc(sizeof(BitNode)); (*bt)->data=ch; CreatBiTree(&((*bt)->LChild)); CreatBiTree(&((*bt)->RChild)); } } void Visit(char ch)//访问根节点 { printf("%c ",ch); }

//以下为递归遍历算法 void PreOrder(BitTree root) /*先序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/ { if (root!=NULL) { Visit(root ->data); /*访问根结点*/ PreOrder(root ->LChild); /*先序遍历左子树*/ PreOrder(root ->RChild); /*先序遍历右子树*/ } } void InOrder(BitTree root) /*中序遍历二叉树, root为指向二叉树(或某一子树)根结点的指针*/ { if (root!=NULL) { InOrder(root ->LChild); /*中序遍历左子树*/ Visit(root ->data); /*访问根结点*/ InOrder(root ->RChild); /*中序遍历右子树*/ } } void PostOrder(BitTree root) /* 后序遍历二叉树,root为指向二叉树(或某一子树)根结点的指针*/ { if(root!=NULL) { PostOrder(root ->LChild); /*后序遍历左子树*/ PostOrder(root ->RChild); /*后序遍历右子树*/ Visit(root ->data); /*访问根结点*/ } } //中序非递归遍历 void InOrder1(struct Node *head) { struct Node *p; struct Node *stack[20]; int top=0; p=head; while(p||top!=0) { while (p)

二叉树的基本操作及实现.cpp

二叉树的基本操作及实现 二叉树的基本操作及实现的代码如下: #include #define MAXNODE 100 typedef char DataType; typedef struct BiTNode{ DataType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; void Visit(DataType bt){ //输出二叉树结点值 cout<lchild=NULL;bt->rchild=NULL; return bt; } BiTree Create_BiTree(DataType x,BiTree lbt,BiTree rbt){ //建立二叉树:以结点值为x的结点为头结点,并以lbt和rbt为左右子树BiTree p; p=new BiTNode; if(!p){ cout<<"无法完成二叉树的建立!"<data=x; p->lchild=lbt;p->rchild=rbt; return p; } BiTree InsertL(BiTree bt,DataType x,BiTree parent){ //在某结点之后插入左结点BiTree p; if(parent==NULL){ cout<<"要插入结点的父节点不存在!"<

数据结构第6章二叉树作业与答案教材

第六章树及二叉树 一、下面是有关二叉树的叙述,请判断正误 (√)1. 若二叉树用二叉链表作存贮结构,则在n个结点的二叉树链表中只有n—1个非空指针域。 (×)2.二叉树中每个结点的两棵子树的高度差等于1。 (√)3.二叉树中每个结点的两棵子树是有序的。 (×)4.二叉树中每个结点有两棵非空子树或有两棵空子树。 (×)5.二叉树中每个结点的关键字值大于其左非空子树(若存在的话)所有结点的关键字值,且小于其右非空子树(若存在的话)所有结点的关键字值。(应当是二叉排序树的特点)(×)6.二叉树中所有结点个数是2k-1-1,其中k是树的深度。(应2i-1) (×)7.二叉树中所有结点,如果不存在非空左子树,则不存在非空右子树。 (×)8.对于一棵非空二叉树,它的根结点作为第一层,则它的第i层上最多能有2i—1个结点。(应2i-1) (√)9.用二叉链表法(link-rlink)存储包含n个结点的二叉树,结点的2n个指针区域中有n+1个为空指针。 (正确。用二叉链表存储包含n个结点的二叉树,结点共有2n个链域。由于二叉树中,除根结点外,每一个结点有且仅有一个双亲,所以只有n-1个结点的链域存放指向非空子女结点的指针,还有n+1个空指针。)即有后继的指针仅n-1个。 (√)10.具有12个结点的完全二叉树有5个度为2的结点。 最快方法:用叶子数=[n/2]=6,再求n 2=n -1=5 (r ) 11、哈夫曼树中没有度为1的结点,所以必为满二叉树。 (r )12、在哈夫曼树中,权值最小的结点离根结点最近。 (r )13、线索二叉树是一种逻辑结构。 (√)14、深度为K的完全二叉树至少有2K-1个结点。 (√ )15、具有n个结点的满二叉树,其叶结点的个数为(n+1)/2。 (√ )16、前序和中序遍历用线索树方式存储的二叉树,不必使用栈。 (╳ )17、哈夫曼树是带权路径长度最短的树,路径上权值较大的点离根较远。 二、填空 1.由3个结点所构成的二叉树有5种形态。 2. 一棵深度为6的满二叉树有n 1+n 2 =0+ n 2 = n -1=31 个分支结点和26-1 =32个叶子。 注:满二叉树没有度为1的结点,所以分支结点数就是二度结点数。 3.一棵具有257个结点的完全二叉树,它的深度为9。 (注:用 log 2 (n) +1= 8.xx +1=9 4.设一棵完全二叉树有700个结点,则共有 350个叶子结点。 答:最快方法:用叶子数=[n/2]=350 5. 设一棵完全二叉树具有1000个结点,则此完全二叉树有500个叶子结点,有499个度为2的结点,有1个结点只有非空左子树,有0个结点只有非空右子树。

相关主题
文本预览
相关文档 最新文档