设t为一颗二叉树的根节点地址指针,设计一个非递归的算法把二叉树中每个节点的左右孩子位置交换

void  Exchange(BinTreeNode* t){stack<BinTreeNode*> s;BinTreeNode* p;if(T == NULL){return ;}s.push(t);while(!s.empty()){t = s.top();s.pop();p = t->lchild;t->lchild = t->rchild;t->rchild = p;if(t->lchild){s.push(t->lchild);}if(t->rchild){s.push(t->rchild);}}
}

设t是一颗按后序遍历方式构成的线索二叉树的根节点指针,设计一个非递归的算法,把一个地址为x的新节点插到t树中,已知地址为y的节点有则作为节点y的右孩子,并把插入后的二叉树仍为后续线索二叉树

一颗高度k具有n个节点的二叉树,按顺序方式存储;

(1)编写用先跟遍历树种每个节点的递归算法

(2)编写将树种最大序号叶子节点的祖先节点节点全部打印输出的算法

一颗高度为k且有n个节点的二叉排序树,同时又是一颗完全二叉树存于向量t中,设计删除树中序号为i且具有左右孩子的一个节点,而不使存储量增加 保证仍为二叉排序树(不一定是完全二叉树)

编写算法判断二叉树是否为平衡二叉树

int Tree_Depth(BinTreeNode* t){//求t节点的深度if(t == NULL){return 0;}else{int left_Depth = Tree_Depth(t->left);int right_Depth = Tree_Depth(t->right);return 1+(left_Depth > right_Depth ? left_Depth : right_Depth);}
}bool Is_Balance_Tree(BinTreeNode* t){//判断是否是平衡二叉树if(t == NULL){return true;}int left_Depth = Tree_Depth(t->left);//左子树深度int right_Depth = Tree_Depth(t->right);//右子树深度if(abs(left_Depth - right_Depth) > 1){return false;}else{return Is_Balance_Tree(t->left) && Is_Balance_Tree(t->right);}
}

编写一个算法,利用叶子节点中的空指针域将所有叶子节点链接为一个带头节点的双链表,算法返回头结点的地址

BinTreeNode* head;//链表头节点
BinTreeNode* pre;//链表当前节点的前一个节点void Creat_list(BinTreeNode* t){if(t){Creat_list(t->lchild);//不一定用中序遍历,因为题目没有要求叶子节点要按照什么样的顺序,因此只要遍历到所有的叶子节点就可以。if(t->lchild == NULL && t->right == NULL){if(head == NULL){//两种情况:头节点是否为空head = new BinTreeNode;head->lchild = NULL;head->rchild = t;t->lchild = head;pre = t;}else{pre->rchild = t;t->lchild = pre;pre = t;}}Creat_list(t->rchild);pre->rchild = NULL;}
}

已知一个二叉树的中序序列和后序序列,写一个建立该二叉树的二叉链表存储结构的算法

char inorder_str[] = {};//中序序列
char postorder_str[] = {};//后序序列int Find_Position(char c){//查找字符c在中序序列中的位置int i = 0;for(i = 0;i < inorder_str.lenght();i++){if(inorder_str[i] == c)break;}return i;
}void Creat_BinTree(BinTreeNode t,int l1,int h1,int l2,int h2){//l1,h1中序序列的开始和结束位置;l2,h2后序序列的开始和结束位置int position = 0t = (BinTreeNode*)malloc(sizeof(BinTreeNode));t->data = postorder_str[h2];t->lchild = NULL;t->rchild = NULL;if(l1 < h1){position = Find_Position(postorder_str[e2]);if(position != l1){//position == l1 时说明该节点没有左子树Creat_BinTree(t->lchild,l1,positon-1,l2,l2+(position-1-l1));}if(position != h1){//position == h1 时说明该节点没有右子树Creat_BinTree(t->rchild,position+1,h1,(h2-1)-(h1-position-1),h2-1);}}
}

写出删除二叉排序树bt中值为x的节点算法(二叉排序树以二叉链表形式存储,删除后仍然保持二叉排序树性质)

void Delete(BSTree *bst,int x){BSTree* f,*p = bst;while(p && p->data != x){if(p->data > x){f = p;p = p->lchild;}else{f = p;p = p->rchild;}}if(p == NULL){return ;}if(p->lchild == NULL){//被删子树没有左子树if(f->lchild == p){f->lchild = p->rchild;}else{f->rchild = p->rchild;}}else if(p->rchild == NULL){//被删子树没有右子树if(f->lchild == p){f->lchild = p->lchild;}else{f->rchild = p->lchild;}}else{BSTree* q = p->lchild;BSTree* s = q;while(q->rchild != NULL){s = q;q = q->rchild;}if(s == p->lchild){//p左子树的根节点没有右子树p->data = s->data;p->lchild = s->lchild;free(s);}else{//p左子树的根节点有右子树p->data = q->data;s->rchild = q->lchild;free(q);}}
}

设t是一颗满二叉树,编写一个将t的线序遍历序列转换为后序遍历序列的递归算法

写出后序线索二叉树的非递归遍历算法

编写一个递归函数,判断两颗二叉树是否相似。如果两个二叉树s和t相似,那么或者他们的左右子树都相似,或者s和t都为空

bool Is_like(BinTreeNode* t1,BinTreeNode* t2){if(t1 == NULL && t2 == NULL){//分为三种情况return true;}else if(t1 == NULL || t2 == NULL){return false;}else{return Is_like(t1->lchild,t2->rchild) && Is_like(t2->lchild,l2->rchild);}
}

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

该二叉排序树已经以二叉链表的形式存储在内存中,使用递归算法,求每个节点的平衡因子并输出

int Tree_Depth(BinTreeNode* t){//求t节点的深度if(t == NULL){return 0;}else{int left_Depth = Tree_Depth(t->left);int right_Depth = Tree_Depth(t->right);return 1+(left_Depth > right_Depth ? left_Depth : right_Depth);}
}void printf_num(BinTreeNode* t){if(t != NULL){printf("节点%d的平衡因子为%d\n",t->value,Tree_Depth(t->left)-Tree_Depth(t->right));printf_num(t->left);printf_num(t->right);}
}

给出中序线索二叉树的节点结构,试编写在不使用栈和递归的情况下先序遍历中序线索二叉树的算法

设二叉树中节点的数据域的值互不相同,设计一个算法将数据域值为x的节点的所有祖先节点的数据域打印出来

bool Is_Ancestor(BinTreeNode* t,int x){if(t == NULL){return false;}if(t->value == x){return true;}if(Is_Ancestor(t->lchild,x)||Is_Ancestor(t->rchild,x){printf("%d",t->value);return true;)
}

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

int Tree_Depth(BinTreeNode* t){//求t节点的深度if(t == NULL){return 0;}else{int left_Depth = Tree_Depth(t->left);int right_Depth = Tree_Depth(t->right);return 1+(left_Depth > right_Depth ? left_Depth : right_Depth);}
}int printf_num(BinTreeNode* t){stack<BinTreeNode*> s;if(t == NULL){return 0;}int num = 0;int temp = 0;s.push(t);BinTreeNode* p;while(!s.empty()){p = s.top();s.pop();if(p != NULL){temp = p->value,Tree_Depth(p->left) - Tree_Depth(p->right);printf("节点%d的平衡因子为%d",p->value,temp);if(temp != 0){num++;}s.push(p->left);s.push(p->right);}}return num;
}

设有n个节点的平衡二叉树的每个节点都标明了平衡因子b,设计节点存储结构,并编写求平衡二叉树的高度的算法(要求算法的时间复杂度为o(log2(n)))

一直一颗二叉树的前序序列和中序序列分别存于两个一维数组中,编写算法建立该二叉树的二叉链表

类似上面的知中序和后序

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

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

以二叉链表为存储结构,编写算法实现如下功能,在二叉树中查找值为x的节点,并求连续节点在书中的层数



东北大学考研二叉树相关试题相关推荐

  1. 编写算法判别给定二叉树是否为完全二叉树_别找了,链表和二叉树相关面试题以及解答,我都给你们找好了...

    来源公众号:苦逼的码农 作者:帅地 无论是在面试还是在平时的做题中,链表相关算法题以及二叉树相关算法题,可以说是考的非常非常多的.我在 2019 的秋招面试中,也是遇到了好几次.为此,我总结了 9 道 ...

  2. 二叉树相关面试题(二)

    二叉树相关问题,在面试中主要通过递归来实现 1.二叉树建立 /**二叉树建立**/ struct Data {int val; };typedef struct BiNode {Data data;B ...

  3. 数据结构和算法面试题系列—二叉树面试题汇总

    这个系列是我多年前找工作时对数据结构和算法总结,其中有基础部分,也有各大公司的经典的面试题,最早发布在CSDN.现整理为一个系列给需要的朋友参考,如有错误,欢迎指正.本系列完整代码地址在 这里. 0 ...

  4. 六大类二叉树面试题汇总解答

    0 概述 继上一篇总结了二叉树的基础操作后,这一篇文章汇总下常见的二叉树相关面试题,主要分为判断类.构建类.存储类.查找类.距离类.混合类这六类大问题. 本文所有代码 https://github.c ...

  5. C++考研复试面试题

    C++考研复试面试题总结 第一章 面向对象程序设计概述 1.什么是结构化程序设计方法?有哪些优点和缺点? 2.什么面向对象程序设计方法?有哪些优点? 3.面向对象与面向过程程序设计有哪些不同点? 4. ...

  6. 【数据结构】- 【考研复试面试题】-汇总大合集

    数据结构-考研复试面试题-汇总大合集 _写在前面的话:第二次写文章,本篇文章涉及内容主要包括数据结构与算法,包含市面上最热门的面试题,加以总结,用于本人的专业课面试复习,包括一些个人理解和总结, 如果 ...

  7. 东北大学计算机考研分数查询,东北大学考研成绩查询

    考研成绩查询时间已出来了,下面由出国留学网小编为你精心准备了"2020年东北大学考研成绩查询时间为2月10日",持续关注本站将可以持续获取更多的考试资讯! 2020年东北大学考研成 ...

  8. 东北大学计算机复试时间,2020年东北大学考研复试时间安排

    复试是硕士研究生招生考试的重要组成部分.复试办法和程序由招生单位公布.下面是小编整理的2020年东北大学考研复试时间安排,供大家参考! 2020年东北大学考研复试时间 东北大学复试时间一般在3月中旬前 ...

  9. 2008年 浙工大考研计算机专业课试题C++

    2008年 浙工大考研计算机专业课试题C++ 个人闲暇之余整理,可能会有许多细节问题且题目实现代码不唯一,若有需要可邮件与我交流. 一,改程序错误 1-1,计算半径为(a+b)的圆的面积 // kao ...

最新文章

  1. GPU上如何优化卷积
  2. 适合自学python的图书-清华学霸整理,Python入门到精通这几本书帮你快速入行
  3. KNN(K-Nearest Neighbor)分类算法原理
  4. clone的fork与pthread_create创建线程有何不同pthread多线程编程的学习小结(转)
  5. koa --- mongoose连接mongoDB
  6. 技术分享|前端性能 关键性能指标以及测量工具介绍
  7. flask框架(三):flask配置文件
  8. birt 报表设计(2)—介绍
  9. 【OpenCV】扫描图像、查找表、计时
  10. Effectively bypassing kptr_restrict on Android
  11. 前端快速上手APICloud App开发
  12. Tomcat 漏洞修复建议
  13. python爬虫——爬取小说
  14. Dockerfile Registry WebUI 之 docker-registry-frontend 基础应用
  15. 【无标题】python类报错:takes no arguments
  16. 广西国家级自然保护区功能区划图(展示)
  17. 工控系统的全球安全现状:全球漏洞实例分析
  18. 超级解霸, 远去的豪杰
  19. 程序员平时都喜欢逛什么论坛呢?
  20. 基于freeradius的无线认证

热门文章

  1. 对话车品觉:顶级数据团队该像支配合默契的篮球队
  2. [AHK]为中航证券增加热键并自动填写信息
  3. Citrix AppCenter 初始化设置指南
  4. U盘格式化时分配单元的大小的设置
  5. Web of Science如何导出参考文献(EndNote)
  6. 安卓浏览器解析apk文件 大小信息_apk提取器安卓版最新版下载_apk提取器安卓版免root下载2020...
  7. js等待ajax执行完,js等待方法执行完再执行
  8. android 紧急呼叫号码,android学习之——紧急呼叫
  9. Linux 探索之旅 | 第二部分第六课:Nano 文本编辑器和终端配置
  10. Unable to connect to database server:specified database is invalid 错误修复方法