补一下递归和二叉树的知识
参考地址,但是我理解的他应该有错误
递归函数
function method(任务层次n){
if(任务层次1){
处理任务;
返回结果
}
当任务层次n的时候,假设n-1层次的任务处理好了,
调用method(n-1)处理的结果完成任务层次n的逻辑
自己的处理逻辑
返回结果
}
###汉诺塔问题
HNT(n,a,c){
最基本的只有一个的时候
if(n==1){
a--->c//从a到c
}
如何处理n个呢:
假设n-1个处理好了的话,那么我们把把n-1个从a移动到b,之后一个a到
c,之后再n-1个从b移动到c;
完成
}
但是这只是证明完成了任务,如何证明最少移动次数呢:
首先被移动到C盘的必定是最大的盘子,否则必定违反“在移动过程中始终保持小盘在大盘之上”的规定。既然要将最大盘移动到C,此时最大盘之上必定没有任何盘子,亦即它独自在一根柱子上,也就是说要把a上面的的n-1移动走,而已经假设了method(n-1)个的最优算法,之后从a到
c只要一步最优的,再n-1个从b–》c还是最优的,因此method(n)最优成立。
二叉树删除节点逻辑
-
参考地址写法,最基本的任务层错误
deleteNode(node){
if(最基本情况节点为空)
返回
deleteNode(左子节点);
deleteNode(右子节点);
删除节点;
} -
叶子:左右节点都是空节点
deleteNode(node){
if(最基本情况节点为叶子)
删除叶子
返回deleteNode(左子节点);
deleteNode(右子节点);if(自身为空)
返回
删除自身;
}