二叉树的深度
class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
public int height(){
return Math.max(left==null?0 : left.height(),right==null?0:right.height())+1;
}
}
import java.util.*;
public class Solution {
//方法一:递归的方式(把方法写在结点类中)
public int TreeDepth(TreeNode root) {
//查看root结点是否为null
if(root==null){
return 0;
}
//计算树的深度
return root.height();
}
//方法二:递归的方式(深度优先遍历的思想)
public int TreeDepth(TreeNode root) {
//查看root结点是否为null
if(root==null){
return 0;
}
//左递归
int leftNum=TreeDepth(root.left);
//右递归
int rightNum=TreeDepth(root.right);
//比较左子树和右子树的高度,选出一个大的加1
return Math.max(leftNum,rightNum)+1;
}
//方法三:层次遍历(广度优先遍历的思想)
public int TreeDepth(TreeNode root) {
//查看root结点是否为null
if(root==null){
return 0;
}
//新建一个队列(先进先出)
Queue<TreeNode> que=new LinkedList<TreeNode>();
//根节点入队
que.add(root);
//记录树的深度
int high=0;
//当队列不为空时,计算树的深度
while(!que.isEmpty()){
//计算出当前循环队列中元素的数目
int size=que.size();
//将当层循环的元素弹出队列,并把它的左右子节点加入队列
while(size!=0){
//当层元素弹出队列
TreeNode node=que.poll();
//左结点存在则入队
if(node.left!=null){
que.add(node.left);
}
//右节点存在则入队
if(node.right!=null){
que.add(node.right);
}
//记录当前循环还剩的元素个数
size--;
}
//里层循环结束 则深度加1
high++;
}
//返回树的深度
return high;
}
}