题目
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
方法1:递归
求一棵树的深度,就是通过比较它的左右子树的深度,若右子树深度深,则这棵树深度为右子树深度+1
public class JZ38 {
//初始化treeNode这种结构
public class TreeNode {
int val;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public static int TreeDepth(TreeNode root) {
if(root == null)
return 0;
else{
int leftTreeDepth = TreeDepth(root.left);
int rightTreeDepth = TreeDepth(root.right);
//返回左右子树中较大的那个值
return 1+(leftTreeDepth > rightTreeDepth ? leftTreeDepth : rightTreeDepth);
}
}
public static void main(String[] args) {
TreeNode test = new JZ38().new TreeNode(6);
int result = TreeDepth(test);
System.out.println(result);
}//运行结果就是为1(因为test的树结构就是根节点为6,左右子树都为null)
}
方法2:利用队列 广度优先算法
class Solution {
public int maxDepth(TreeNode root) {
if(root == null){
return 0;
}
int res = 0;
Queue<TreeNode> queue = new LinkedList<TreeNode>(); //队列记录每一层的节点
queue.offer(root);
while(!queue.isEmpty()){
int size = queue.size();
for(int i = 0; i < size; i++){//循环遍历每一层的节点
TreeNode cur = queue.poll();
if(cur.left != null){
queue.offer(cur.left);
}
if(cur.right != null){
queue.offer(cur.right);
}
}
res++;
}
return res;
}
}