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

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

解题:

 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. git合并相关问题(copy)

    [说明:资料来自http://gitbook.liuhui998.com/3_3.html] 一个Git仓库可以维护很多开发分支.现在我们来创建一个新的叫”experimental”的分支: $ gi ...

  2. 解决 The word is not correctly spelled问题(转载)

    转自:http://jyao.iteye.com/blog/1261555 The word is not correctly spelled 此问题是eclipse校验单词拼写造成,如果出在配置文件 ...

  3. C++中的显式构造函数

    有如下一个简单的复数类: class ClxComplex { public: ClxComplex(double dReal = 0.0, double dImage = 0.0) { m_dRea ...

  4. codeforces 570 D. Tree Requests (dfs)

    题目链接: 570 D. Tree Requests 题目描述: 给出一棵树,有n个节点,1号节点为根节点深度为1.每个节点都有一个字母代替,问以结点x为根的子树中高度为h的后代是否能够经过从新排序变 ...

  5. bzoj1415 [Noi2005]聪聪和可可【概率dp 数学期望】

    传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=1415 noip2016 D1T3,多么痛的领悟...看来要恶补一下与期望相关的东西了. 这是 ...

  6. [ZPG TEST 110] 多边形个数【DP】

    1. 多边形个数 (polygons.pas/c/cpp) [问题描述] 给定N线段,编号1到n.并给出这些线段的长度,用这些线段组成一个K边形,并且每个线段做多使用一次.若使用了一条不同编号的线段, ...

  7. Ubuntu下如何用命令运行deb安装包

    转载自 WindTaiL的博客 如果ubuntu要安装新软件,已有deb安装包(例如:iptux.deb),但是无法登录到桌面环境.那该怎么安装?答案是:使用dpkg命令. dpkg命令常用格式如下: ...

  8. Styles and Themens(1)详述

    Styles and Themes IN THIS DOCUMENT Defining Styles Inheritance Style Properties Applying Styles and ...

  9. Codeforces Beta Round #98 (Div. 2)(A-E)

    A #include <iostream> #include<cstdio> #include<cstring> #include<algorithm> ...

  10. Fresco 源码分析(序)

    1. 为什么要写这个分析的博客 其实关于Fresco的相关内容,大家上网搜索,一般可以找到一大推,但是为什么我还要写关于这个的呢,因为在网上搜索中文和英文的关于fresco的相关知识时,大家只是潜在的 ...