出题:要求判断二元树的深度(最长根节点到叶节点的路径);

分析:二元递归不容易使用循环实现

解题:

 struct Node {
int value;
Node *left;
Node *right;
};
/**
* 首先考虑递归结束条件
* 然后考虑问题分解
* 最后考虑问题合并
* */
int TreeDepth(Node *root) {
if(root == NULL) return ;
int leftDepth=;
int rightDepth=;
if(root->left != NULL)
leftDepth=TreeDepth(root->left);
if(root->right != NULL)
rightDepth=TreeDepth(root->right); if(leftDepth > rightDepth)
return leftDepth+;
else
return rightDepth+;
}

出题:输入一个字符串,要求输出字符串中字符的所有排列与组合;

分析:

  • 排列(所有元素组成的所有有序序列):建立正确的求排列组合的思维,一位一位的考虑则使用递归处理子序列,每一位有不同的交换方式则使用循环交换不同位置的元素,注意递归之后的还原。由于当前索引元素只与其之后的元素交换,所以不会引入重复;
  • 组合(不同元素组成的无序集合):组合问题可以转换成为每一个元素是否出现问题,则使用0/1状态表示元素的出现与否,然后整体框架与排列类似;

解题:

 /**
* 首先考虑递归结束条件:当index到达最后一个元素的时候
* 说明可以输出一次序列
* 然后考虑递归条件:将当前index指向的元素依次与array
* 中index之后的元素交换,然后进行递归,递归之后需要
* 将交换还原
* */
void arrange(char *array, int length, int index) {
if(length == index+) {
printf("\n");
for(int i=;i<length;i++)
printf("%c, ", array[i]);
printf("\n");
} int temp;
for(int i=index;i<length;i++) {
temp=array[index];
array[index]=array[i];
array[i]=temp; arrange(array,length, index+); temp=array[index];
array[index]=array[i];
array[i]=temp;
}
}
void combination(char *array, bool *isShown, int length, int index) {
if(length==index) {
printf("\n*");
for(int i=;i<length;i++) {
if(isShown[i])
printf("%c",array[i]);
}
return;
} for(int i=;i<;i++) {
isShown[index]=i;
combination(array, isShown, length, index+);
} }
int main() {
char array1[]="abcd";
char array2[]="abc";
bool isShown[];
combination(array2, isShown, , );
//arrange(array1,4,0);
return ;
}

笔试算法题(16):二叉树深度计算 & 字符串全排列的更多相关文章

  1. 算法题16 贪吃的小Q 牛客网 腾讯笔试题

    算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ...

  2. 前端如何应对笔试算法题?(用node编程)

    用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ...

  3. 小小c#算法题 - 11 - 二叉树的构造及先序遍历、中序遍历、后序遍历

    在上一篇文章 小小c#算法题 - 10 - 求树的深度中,用到了树的数据结构,树型结构是一类重要的非线性数据结构,树是以分支关系定义的层次结构,是n(n>=0)个结点的有限集.但在那篇文章中,只 ...

  4. 笔试算法题(37):二叉树的层序遍历 & 最长递增的数字串

    出题:要求层序遍历二叉树,从上到下的层次,每一层访问顺序为从左到右,并将节点一次编号,输出如下:如果只要求打印指定的level的节点,应该如何实现. a b  c d  e  f  g h  i  分 ...

  5. 笔试算法题(24):找出出现次数超过一半的元素 & 二叉树最近公共父节点

    出题:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字: 分析: 解法1:首先对数组进行排序,时间复杂度为O(NlogN),由于有一个数字出现次数超过了数组的一半,所以如果二分数组的话, ...

  6. 笔试算法题(13):反转链表 & 左旋转字符串

    出题:反转链表(递归和非递归解法): 分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL: 解题: struct Node { int v; Nod ...

  7. 笔试算法题(41):线索二叉树(Threaded Binary Tree)

    议题:线索二叉树(Threaded Binary Tree) 分析: 为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指 ...

  8. 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树

    出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ...

  9. 笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到

    出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连): 分析: 解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的 ...

随机推荐

  1. bzoj 1084: [SCOI2005]最大子矩阵【dp】

    分情况讨论,m=1的时候比较简单,设f[i][j]为到i选了j个矩形,前缀和转移一下就行了 m=2,设f[i][j][k]为1行前i个,2行前j个,一共选了k个,i!=j的时候各自转移同m=1,否则转 ...

  2. 小程序 video 层级,原生组件

    原生组件的层级是最高的,所以页面中的其他组件无论设置 z-index 为多少,都无法盖在原生组件上. 后插入的原生组件可以覆盖之前的原生组件. 原生组件还无法在 scroll-view.swiper. ...

  3. SS上网配置(Window 7/8/10 )详解

    SS很多人都会用到,尤其是做外贸的朋友,今天我们来说下SS相关的配置. 首先从官网下载解压后的目录如结构下: ​ 点击***.exe,选择以管理员身份运行,切记打开后界面如下 ​​ 服务器地址为一段I ...

  4. 【底层原理】高级开发必须懂的"字节对齐"

    认识字节对齐之前,假定int(4Byte),char(1Byte),short(2Byte) 认识字节对齐 先看段代码: struct Data1 { char a; int b; short c; ...

  5. linux 正确的关机方法

    正确的关机方法 1. 查看系统的使用状态 执行who命令或者netstat -a ,要查看后台执行的程序可以执行“ps -aux” 2. 正确的关机命令 1)将内存中数据同步写入磁盘:sync,这个命 ...

  6. Android中集成第三方支付

    常见的第三方支付解决方案 支付宝支付 微信支付 银联支付 Ping++统一支付平台(需要继承服务器端和客户端) 短信支付 支付宝的集成流程 相关资料链接: 支付宝支付指引流程:支付指引流程 支付宝An ...

  7. laravel 淘宝 NPM 镜像

    淘宝 NPM 镜像:http://npm.taobao.org/ 这是一个完整 npmjs.org 镜像,你可以用此代替官方版本(只读),同步频率目前为 10分钟 一次以保证尽量与官方服务同步. 当前 ...

  8. T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB

    题目描述 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表 ...

  9. Jboss服务器使用

    一.作者前言 早上坐地铁的时候,阅览about JAVA.了解到一个程序猿,对于服务器的使用,最起码的熟悉那么几种,例如tomcat,jboss,weblogic,websphere,还有Nginx. ...

  10. NavigationView的使用

    代码已经分享至github:https://github.com/YanYoJun/NavigationDemo 转载请注明原文链接:http://www.cnblogs.com/yanyojun/p ...