笔试算法题(16):二叉树深度计算 & 字符串全排列
出题:要求判断二元树的深度(最长根节点到叶节点的路径);
分析:二元递归不容易使用循环实现
解题:
 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):二叉树深度计算 & 字符串全排列的更多相关文章
- 算法题16 贪吃的小Q 牛客网 腾讯笔试题
		算法题16 贪吃的小Q 牛客网 腾讯笔试题 题目: 链接:https://www.nowcoder.com/questionTerminal/d732267e73ce4918b61d9e3d0ddd9 ... 
- 前端如何应对笔试算法题?(用node编程)
		用nodeJs写算法题 咱们前端使用算法的地方不多,但是为了校招笔试,不得不针对算法题去练习呀! 好不容易下定决心 攻克算法题.发现js并不能像c语言一样自建输入输出流.只能回去学习c语言了吗?其实不 ... 
- 小小c#算法题 - 11 - 二叉树的构造及先序遍历、中序遍历、后序遍历
		在上一篇文章 小小c#算法题 - 10 - 求树的深度中,用到了树的数据结构,树型结构是一类重要的非线性数据结构,树是以分支关系定义的层次结构,是n(n>=0)个结点的有限集.但在那篇文章中,只 ... 
- 笔试算法题(37):二叉树的层序遍历 & 最长递增的数字串
		出题:要求层序遍历二叉树,从上到下的层次,每一层访问顺序为从左到右,并将节点一次编号,输出如下:如果只要求打印指定的level的节点,应该如何实现. a b c d e f g h i 分 ... 
- 笔试算法题(24):找出出现次数超过一半的元素 & 二叉树最近公共父节点
		出题:数组中有一个数字出现的次数超过了数组长度的一半,请找出这个数字: 分析: 解法1:首先对数组进行排序,时间复杂度为O(NlogN),由于有一个数字出现次数超过了数组的一半,所以如果二分数组的话, ... 
- 笔试算法题(13):反转链表 & 左旋转字符串
		出题:反转链表(递归和非递归解法): 分析:有递归跟非递归实现,注意对原始链表头节点的处理,因为其他节点都指向下一个节点,其需要指向NULL: 解题: struct Node { int v; Nod ... 
- 笔试算法题(41):线索二叉树(Threaded Binary Tree)
		议题:线索二叉树(Threaded Binary Tree) 分析: 为除第一个节点外的每个节点添加一个指向其前驱节点的指针,为除最后一个节点外的每个节点添加一个指向其后续节点的指针,通过这些额外的指 ... 
- 笔试算法题(36):寻找一棵二叉树中最远节点的距离 & 根据二叉树的前序和后序遍历重建二叉树
		出题:求二叉树中距离最远的两个节点之间的距离,此处的距离定义为节点之间相隔的边数: 分析: 最远距离maxDis可能并不经过树的root节点,而树中的每一个节点都可能成为最远距离经过的子树的根节点:所 ... 
- 笔试算法题(35):最长递增子序列 & 判定一个字符串是否可由另一个字符串旋转得到
		出题:求数组中最长递增子序列的长度(递增子序列的元素可以不相连): 分析: 解法1:应用DP之前需要确定当前问题是否具有无后效性,也就是每个状态都是对之前状态的一个总结,之后的状态仅会受到前一个状态的 ... 
随机推荐
- bzoj 3675: [Apio2014]序列分割【斜率优化dp】
			首先看这个得分方式,容易发现就相当于分k段,每段的值和两两乘起来. 这样就很容易列出dp方程:设f[i][j]为到j分成分成i段,转移是 \[ f[i][j]=max { f[k][j]+s[k]*( ... 
- poj 1511 Invitation Cards spfa 邻接矩阵
			题目链接: http://poj.org/problem?id=1511 题目大意: 这道题目比较难理解,我读了好长时间,最后还是在队友的帮助下理解了题意,大意就是,以一为起点,求从一到其他各点的最短 ... 
- JDK6中System.getProperties返回键值说明
			JDK6中java.lang.System.getProperties()方法返回键值说明. 键 相关值的描述 java.version Java 运行时环境版本 java.vendor Java 运 ... 
- 灰度世界算法(Gray World Algorithm)                                                    分类:            图像处理             Matlab             2014-12-07 18:40    874人阅读    评论(0)    收藏
			人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能, 不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜 ... 
- HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP/2 历史演变和设计思路(详)*
			HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点. 本文介绍 HTTP 协议的历史演变和设计思路. 一.HTTP/0.9 HTTP 是基于 TCP ... 
- Saas物联网共享平台实战
			什么是SaaS系统: 越来越多的软件,开始采用云服务. 云服务只是一个统称,可以分成三大类. IaaS:基础设施服务,Infrastructure-as-a-service PaaS:平台服务,Pla ... 
- FreeMarker-网页静态化
			网页静态化解决方案在实际开发中运用比较多,例如新闻网站,门户网站中的新闻频道或者是文章类的频道. 网页静态化技术和缓存技术的共同点都是为了减轻数据库的访问压力,但是具体的应用场景不同,缓存比较适合小规 ... 
- pandas 选择某几列
			转自:https://blog.csdn.net/aaa_aaa1sdf/article/details/77414387 col_n = ['名称','收盘价','日期'] a = pd.DataF ... 
- 13 Red-black Trees
			13 Red-black Trees Red-black trees are one of many search-tree schemes that are "balanced" ... 
- ASP.NET Excel下载方法一览
			方法一 通过GridView(简评:方法比较简单,但是只适合生成格式简单的Excel,且无法保留VBA代码),页面无刷新 aspx.cs部分 using System; using System.Co ... 
