1.题目描述:
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
2.解题思路:
本题相对比较简单。根据二叉树深度的定义,我们有以下理解:如果一棵树只有一个结点,那么它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度为其左子树深度加1;相反,如果根结点只有右子树而没有左子树,那么深度为右子树深度加1;如果既有左子树又有右子树,那么该树的深度为左、右子树深度的较大值加1。
因此,很明显本题应该使用递归的思路来解决。。
3.编程实现(Java):
public class BinaryTreeDepth_3 {
public static void main(String[] args) {
TreeLinkNode root = new TreeLinkNode(1);
TreeLinkNode node2 = new TreeLinkNode(2);
TreeLinkNode node3 = new TreeLinkNode(3);
TreeLinkNode node4 = new TreeLinkNode(4);
TreeLinkNode node5 = new TreeLinkNode(5);
TreeLinkNode node6 = new TreeLinkNode(6);
TreeLinkNode node7 = new TreeLinkNode(7);
root.left = node2;
root.right = node3;
node2.left = node4;
node2.right = node5;
node5.left = node7;
node3.right = node6;
System.out.println(treeDepth(root));
}
static int treeDepth(TreeLinkNode root) {
if (root != null) {
int left = treeDepth(root.left);
int right = treeDepth(root.right);
return left > right ? left + 1 : right + 1;
}
return 0;
}
static class TreeLinkNode {
int val = 0;
TreeLinkNode left = null;
TreeLinkNode right = null;
public TreeLinkNode(int val) {
this.val = val;
}
}
}