软件编程
位置:首页>> 软件编程>> java编程>> Java语言描述二叉树的深度和宽度

Java语言描述二叉树的深度和宽度

作者:babylove_BaLe  发布时间:2021-12-02 10:59:34 

标签:java,二叉树,算法

解释:

二叉树的深度:从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
二叉树的宽度:二叉树的每一层中都有一定数量的节点,节点数最多的那一层的节点数叫做二叉树的宽度。

思路:递归实现。

1.每个节点都可以看作根节点
2.根节点(任意一个节点)的深度等于它的左子树或右子树深度最大值+1
3.从根结点开始遍历,若遍历到叶子节点,深度为0


 //二叉树的深度
 public static int Depth(node root){
   if(root == null){
     return 0;
   }
   int dl = Depth(root.leftchild);
   int dr = Depth(root.rightchild);  
   return dl>dr? dl+1:dr+1;
 }

二、二叉树的宽度

思路:层序遍历时添加一个计数器,记录每层的节点数

1.每层出队列时记录下一层的节点数,其实就是队列的Size()
2.每层遍历结束时,比较最大宽度与当前层节点数,记录最大值


public static int Width(node root) {
if(root == null)
   return 0;
Queue<node> q = new LinkedList<node>();
q.add(root);
int width = 1;
//最大宽度
int len = 1;
//当前层节点数
while(q.size()>0){
while(len-->0){
node node = q.poll();
if(node.leftchild != null){
q.add(node.leftchild);
}
if(node.rightchild != null){
q.add(node.rightchild);
}
}
len = q.size();
//每层循环结束后记录下一层的节点数
width = width>q.size() ? width : q.size();
}
return width;
}

来源:http://blog.csdn.net/babylove_bale/article/details/78534996

0
投稿

猜你喜欢

手机版 软件编程 asp之家 www.aspxhome.com