题目39-1:输入一颗二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(包含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。二叉树定义如下。
public class TreeNode{
public int value;
public TreeNode leftNode;
public TreeNode rightNode;
public TreeNode() {
}
public TreeNode(int value) {
this.value = value;
}
}
分析:
下图中的二叉树的深度为4,因为它从根结点到叶结点最长的路径包含4个结点(从根结点1开始,经过结点2和结点5,最终到达叶结点7)。
①如果一棵树只有一个结点,它的深度为1。
②如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。
③如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。
代码如下所示:
public static int treeDepth(TreeNode pNode) {
if (pNode == null) return 0;
int nLeft = treeDepth(pNode.leftNode);
int nRight = treeDepth(pNode.rightNode);
return (nLeft > nRight) ? (nLeft + 1) : (nRight + 1);
}
public static void main(String[] args) {
TreeNode node1 = new TreeNode(1);
TreeNode node2 = new TreeNode(2);
TreeNode node3 = new TreeNode(3);
TreeNode node4 = new TreeNode(4);
TreeNode node5 = new TreeNode(5);
TreeNode node6 = new TreeNode(6);
TreeNode node7 = new TreeNode(7);
// 左右均有结点
// node1.leftNode = node2;
// node1.rightNode = node3;
// node2.leftNode = node4;
// node2.rightNode = node5;
// node3.rightNode = node6;
// node5.leftNode = node7;
// System.out.println(treeDepth(node1));
// 只有左结点
//