题目描述
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
练习地址
实现
树的遍历方式总体分为两类:深度优先搜索(DFS)、广度优先搜索(BFS);
常见的 DFS : 先序遍历、中序遍历、后序遍历;
常见的 BFS : 层序遍历(即按层遍历)。
递归 - 深度优先遍历
public class C55_tree_TreeDepth {
static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int val) { this.val = val; }
}
static int treeDepth(TreeNode root) {
if (root == null) {
return 0;
}
int leftDepth = treeDepth(root.left);
int rightDepth = treeDepth(root.right);
return leftDepth > rightDepth ? leftDepth + 1 : rightDepth + 1;
}
}
非递归 - 层次遍历
public int maxDepth(TreeNode root) {
if (root == null) return 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
Queue<TreeNode> tmp;
queue.offer(root);
int count = 0;
while (!queue.isEmpty()) {
tmp = new LinkedList<TreeNode>();
for (TreeNode node : queue) {
if (node.left != null) tmp.add(node.left);
if (node.right != null) tmp.add(node.right);
}
queue = tmp;
count++;
}
return count;
}
Test
public static void main(String[] args) {
TreeNode root=new TreeNode(1);
TreeNode root2=new TreeNode(2);
TreeNode root3=new TreeNode(3);
TreeNode root4=new TreeNode(4);
TreeNode root5=new TreeNode(5);
TreeNode root6=new TreeNode(6);
TreeNode root7=new TreeNode(7);
root.left=root2;
root.right=root3;
root2.left=root4;
root2.right=root5;
root5.left=root7;
root3.right=root6;
System.out.println(treeDepth(root));
}