题目
输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
如果一棵树只有一个结点,它的深度为1。如果根结点只有左子树而没有右子树,那么树的深度应该是其左子树的深度加1;同样如果根结点只有右子树而没有左子树,那么树的深度应该是其右子树的深度加1。如果既有右子树又有左子树,那该树的深度就是其左、右子树深度的较大值再加1。
实现
public class BinaryTreeNode {
public Object data;
public BinaryTreeNode left;
public BinaryTreeNode right;
public BinaryTreeNode() {
}
public BinaryTreeNode(Object data, BinaryTreeNode left, BinaryTreeNode right) {
this.data = data;
this.left = left;
this.right = right;
}
}
public class BinaryTree {
public static void main(String[] args) {
//模拟生成上图的二叉树
BinaryTreeNode node7 = new BinaryTreeNode("7", null, null);
BinaryTreeNode node5 = new BinaryTreeNode("5", null, node7);
BinaryTreeNode node4 = new BinaryTreeNode("4", null, null);
BinaryTreeNode node6 = new BinaryTreeNode("6", null, null);
BinaryTreeNode node3 = new BinaryTreeNode("3", null, node6);
BinaryTreeNode node2 = new BinaryTreeNode("2", node4, node5);
BinaryTreeNode node1 = new BinaryTreeNode("1", node2, node3);
BinaryTree tree = new BinaryTree();
int length = tree.treeDepth(node1);
System.out.println(length);
}
public int treeDepth(BinaryTreeNode node) {
if (node == null) {
return 0;
}
int left = treeDepth(node.left);
int right = treeDepth(node.right);
return (left > right) ? (left + 1) : (right + 1);
}
}