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

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

解题:

 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 ;
}

最新文章

  1. MySql安装出现问题---无服务,修改密码
  2. HDU 5761 Rower Bo
  3. linux下udp编程
  4. Hidden Markov Model
  5. Eclipse 项目有红感叹号、小红叉
  6. Mysql 中is null 和 =null 的区别
  7. Swift - 38 - 枚举的基本语法
  8. Flask中路由模块的实现
  9. 29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
  10. nginx反向代理的nginx.conf配置
  11. 使用Intent传递对象
  12. [ZJOI2018]胖
  13. Unix环境高级编程-阻塞访问原理——等待队列
  14. Asp.Net+JQuery.Ajax之$.post
  15. windows下《Go Web编程》之Go工作空间
  16. 小组成员及其git链接
  17. HDU 6214 Smallest Minimum Cut 最小割,权值编码
  18. WordCount示例深度学习MapReduce过程
  19. 居中div,居中浮动的元素
  20. spring-boot-JdbcTemplate

热门文章

  1. OSI模型与TCP/IP模型基础
  2. springmvc h5上传图片
  3. BZOJ 1001 [BeiJing2006]狼抓兔子 (UVA 1376 Animal Run)
  4. 51nod 1138 连续整数的和
  5. 文件输入输出C++操作
  6. linux安装glassfish并布署
  7. 437 Path Sum III 路径总和 III
  8. Oracle用户角色权限相关视图
  9. 用vue写的移动端车牌号输入法
  10. Android源码之陌陌源码