数据结构2 二叉树的高度和宽度

宽度:节点的叶子数
深度:节点的层数

算法上有所谓的"宽度优先算法"和"深度优先算法"

 

二叉树的宽度定义为具有最多结点数的层中包含的结点数。

 

 

 

比如上图中,

第1层有1个节点, 

第2层有2个节点, 

第3层有4个节点, 

第4层有1个节点,

可知,第3层的结点数最多

所以这棵二叉树的宽度就是4

 

定义一个节点类

复制代码
class TreeNode {
    char val;
    TreeNode left = null;
    TreeNode right = null;

    TreeNode(char _val) {
        this.val = _val;
    }
}
复制代码

 

1求高度

这个可以使用递归,分别求出左子树的深度、右子树的深度,两个深度的较大值+1即可。

复制代码
int  getHeight(TreeNode root)
{
    if(root==null)
       return 0;  
   else{
       int left=getHeight(root.left);
       int right=getHeight(root.right);
       return 1+Math.max(left,right);
         }
}
复制代码

 2求宽度

 使用队列,层次遍历二叉树。在上一层遍历完成后,下一层的所有节点已经放到队列中,此时队列中的元素个数就是下一层的宽度。以此类推,依次遍历下一层即可求出二叉树的最大宽度。

复制代码
public int getWeight(TreeNode root)
{
     if(root==null)
         return 1;

   Queue <TreeNode>queue=new ArrayDeque<TreeNode>();

       
       int maxWeight=1;//最大宽度
       queue.add(root);//入队
         while(true)
         {
            int len=queue.size();//当前层节点数
            if(len==0)
              break;
           while(len>0)//如果当前层还有节点
           {
            TreeNode t=queue.poll();
            len--;
  
             if(t.left!=null)
               queue.add(t.left);//下一层节点入队
             if(t.right!=null)
               queue.add(t.right); //下一层节点入队
            }
           maxWeight=Math.max(maxWeight,queue.size());
     }
  return  maxWeight;
}                 
复制代码

 求宽度 方法2

 

复制代码
//求叶子数
    public  static int countOfLeaf(TreeNode root)
    {
        int result=0;
        if(root==null)
          return 0;
        if(root.left==null  || root.right==null)
          return 1;
        else
             result= countOfLeaf(root.left)+countOfLeaf(root.right);
        
        return result;
        
        
    }
复制代码

 

 

 

 参考:http://www.cnblogs.com/xudong-bupt/p/4036190.html

 

posted @   逍的遥  阅读(11436)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
点击右上角即可分享
微信分享提示