问题1、求一棵二叉树的节点个数
分析:
从二叉树的概念看:
- 空树:节点个数是0
- 非空:根节点+根节点的左子树节点+根节点的右子树节点
从递归的角度看
-
节点个数 = 根节点+左子树(根节点+左子树(…))+右子树(根节点+右子树(…))
-
一个问题可以转换为多个子问题,多个子问题与原问题有相同的解法
//定义一棵二叉树
class BTNode{
BTNode left; //根节点的左子树
BTNode right; //根节点的右子树
int val; //值
public BTNode(int val) {
this.val = val;
}
}
//求二叉树的节点个数
public int getNodeCount(BTNode root) {
//空树
if(root == null) {
return 0;
}
return 1 + getNodeCount(root.left) + getNodeCount(root.right);
}
图解
执行的顺序没有标注非常细致,但是应该可以看清楚了。
小结:
关于递归的问题永远不要展开想,重复问题完全可以交由计算机去做。
可以把递归想象成单行道,必须走到头才能折回来