剑指Offer面试题39(Java版):二叉树的深度

题目:输入一棵二叉树的根节点,求该数的深度。从根节点到叶结点依次进过的结点(含根,叶结点)形成树的一条路径,最长路径的长度为树的深度。

例如,如下图的二叉树的深度为4,因为它从根节点到叶结点的最长的路径包含4个结点(从根结点1开始,经过2和结点5,最终到达叶结点7)

我们可以从另一种角度来理解树的深度。如果一棵树只有一个结点,它的深度为1,如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度+1.同样如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树+1.如果既有左子树又有右子树,那概述的深度就是左、右子树的深度的较大值加1.。

利用这个思路,我们可以用递归来实现代码:

 

//普通二叉树求深度
	public int treeDepth(BinaryTreeNode root){
		if(root == null)
			return 0;
		int nLeft = treeDepth(root.leftNode);
		int nRight = treeDepth(root.rightNode);
		return (nLeft > nRight)?(nLeft+1):(nRight+1);
	}

如果公司对编程能力有较高的要求,面试官可能会追加一个与前面的问题相关但难度较大的问题,比如,应聘者做完上面的问题后,面试官追问:

 

题目二:输入一棵二叉树的根节点,判断该树是不是平衡的二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。

需要重复遍历结

你可能感兴趣的:(剑指offer(Java版))