Java实现求二叉树的深度和宽度_java

这个是常见的对二叉树的操作。总结一下:

设节点的数据结构,如下:

复制代码 代码如下:

class TreeNode {
    char val;
    TreeNode left = null;
    TreeNode right = null;

    TreeNode(char _val) {
        this.val = _val;
    }
}

1.二叉树深度

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

复制代码 代码如下:

// 获取最大深度
    public static int getMaxDepth(TreeNode root) {
        if (root == null)
            return 0;
        else {
            int left = getMaxDepth(root.left);
            int right = getMaxDepth(root.right);
            return 1 + Math.max(left, right);
        }
    }

2.二叉树宽度

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

复制代码 代码如下:

// 获取最大宽度
    public static int getMaxWidth(TreeNode root) {
        if (root == null)
            return 0;

        Queue<TreeNode> queue = new ArrayDeque<TreeNode>();
        int maxWitdth = 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);// 下一层节点入队
            }
            maxWitdth = Math.max(maxWitdth, queue.size());
        }
        return maxWitdth;
    }

时间: 2024-07-28 19:21:32

Java实现求二叉树的深度和宽度_java的相关文章

[华为机试练习题]42.求二叉树的深度和宽度

题目 题目标题: 求二叉树的宽度和深度 给定一个二叉树,获取该二叉树的宽度和深度. 例如输入 a / \ b c / \ / \ d e f g 返回3. 接口说明 原型: int GetBiNodeInfo(BiNode &head, unsigned int *pulWidth, unsigned int *pulHeight) 输入参数: head 需要获取深度的二叉树头结点 输出参数(指针指向的内存区域保证有效): pulWidth 宽度 pulHeight 高度 返回值: 0 成功 1

求二叉树的深度和宽度[Java]

这个是常见的对二叉树的操作.总结一下: 设节点的数据结构,如下: 1 class TreeNode { 2 char val; 3 TreeNode left = null; 4 TreeNode right = null; 5 6 TreeNode(char _val) { 7 this.val = _val; 8 } 9 }  1.二叉树深度 这个可以使用递归,分别求出左子树的深度.右子树的深度,两个深度的较大值+1即可. 1 // 获取最大深度 2 public static int ge

如何求二叉树深度

题目描述: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 输入: 第一行输入有n,n表示结点数,结点号从1到n.根结点为1. n <= 10. 接下来有n行,每行有两个个整型a和b,表示第i个节点的左右孩子孩子.a为左孩子,b为右孩子.当a为-1时,没有左孩子.当b为-1时,没有右孩子. 输出: 输出一个整型,表示树的深度. 样例输入: 3 2 3 -1 -1 -1 -1 样例输出: 2 之前在Cracking the

【算法导论】求二叉树的叶子数和深度

二叉树的叶子数和深度 二叉树的遍历算法是许多二叉树运算的算法设计的基础,因此遍历算法的应用很广泛.下面以遍历算法求二叉树的叶子数和深度为例,来加深对于二叉树遍历算法的理解.1. 统计二叉树中的叶子结点数因为叶子结点是二叉树中那些左孩子和右孩子均不存在的结点,所以可在二叉树的遍历过程中,对这种特殊结点进行计数,来完成对叶子结点数的统计.这个统计可在任何一种遍历方式下给出,下面是利用中序遍历来实现的算法: /**********************************************

关于二叉树的深度算法题目及解答

求二叉树的深度算法 算法的思想: 采用二叉树的后序遍历非递归算法.由于后序遍历非递归算法使用一个栈实现,每次都会在一条路径上走到最底层才向上访问,再向右访问.因此,记录下栈在遍历中的最大值,即为二叉树的最大深度. #include <iostream> #include <stack> using namespace std; struct BinTree {     int data;     BinTree *lc;     BinTree *rc; }BTNode,*BinT

max hl-数据结构二叉树求二叉树深度算法

问题描述 数据结构二叉树求二叉树深度算法 c:documents and settingsadministratoroo.cpp(79) : error C2065: 'max' : undeclared identifier

java好心人 求帮助啊 帮我分析一下行么

问题描述 java好心人 求帮助啊 帮我分析一下行么 出去面试,我不知道哪里问题,想请好心人帮分析一下, 我原来有一个同事A女,离职出去找工作,现在一个月5.5K,也没干1年啊,而且代码敲的也不是特熟悉,我问她 你进这个公司 人家都问你什么了 她就说问了问基础,, 我还有一个同事B女,servlet.什么javaWeb都不会,,月薪4.5K 我不敢说我多强,我想问一下哪里出了问题么.我投公司,,因为我的项目经验没有,,我确实不敢说多好,但,,人家老是问我这我问那的,感觉都是些无意义的小题,,or

java创建递归二叉树,输出根数据时出现空指针异常

问题描述 java创建递归二叉树,输出根数据时出现空指针异常 代码如下:import java.io.File;import java.io.FileNotFoundException;import java.util.LinkedList;import java.util.Scanner;import java.util.*;class BiNode{ public String data; public BiNode lchild; public BiNode rchild; public

java 文件上传-java上传图片获取图片的高度和宽度

问题描述 java上传图片获取图片的高度和宽度 java上传图片的时候,怎么获取上传的图片的高度和宽度,通过实际的高度和宽度,设置图片缩略图的高度和宽度,求代码,谢谢~! 解决方案 Java不需要加载整张图片而获取图片的大小 参考: