package com.niuke;
import java.util.LinkedList;
import java.util.Queue;
/**
* Created by admin on 2018/3/6.
*/
public class DeepTree {
//求二叉树的深度
//1 递归 没啥说的
public int TreeDepth2(TreeNode root) {
//return root==null?0:Math.max(TreeDepth(root.left),TreeDepth(root.right));
if(root==null) {
return 0;
}
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return Math.max(left,right)+1;
}
//2 非递归:按层次遍历 用队列
public int TreeDepth(TreeNode root) {
if(root==null) {
return 0;
}
Queue<TreeNode> queue=new LinkedList<TreeNode>();
queue.add(root);
int depth=0;//深度
int count=0;//该层的最左节点
int lastcount=1;//该层的最右节点
while(queue.size()!=0) {
TreeNode head=queue.poll();//将队列中的节点弹出,并将其左右节点放入
count++;
if(head.left!=null) {
queue.add(head.left);
}
if(head.right!=null) {
queue.add(head.right);
}
if(count==lastcount) {//弹出该层的最后一个节点
lastcount=queue.size();//当前队列的长度就是下一层的最后节点
depth++;
count=0;//重置最左节点
}
}
return depth;
}
}
输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
最新推荐文章于 2021-06-30 10:42:10 发布