由二叉树看多路递归

问题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);
}

图解

在这里插入图片描述
执行的顺序没有标注非常细致,但是应该可以看清楚了。

小结:

关于递归的问题永远不要展开想,重复问题完全可以交由计算机去做。
可以把递归想象成单行道,必须走到头才能折回来

发布了52 篇原创文章 · 获赞 6 · 访问量 1450

猜你喜欢

转载自blog.csdn.net/qq_40488936/article/details/104565547