求二叉树中叶子节点的个数

求二叉树中叶子节点的个数

面试题二叉树

题目描述
求二叉树中叶子节点的个数。

叶子节点的定义:如果一个节点既没有左孩子,也没有右孩子,则该节点为叶子节点。

示例:

    3
   /   9  20
    /     15   7

在这个二叉树中,叶子节点有 9,15,7,所以返回 3。

Java 实现

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int x) {
        val = x;
    }
}

class Solution {
    public int getLeafCount(TreeNode root) {
        if (root == null) {
            return 0;
        }
        if (root.left == null && root.right == null) {
            // 输出叶子节点
            System.out.println("leaf nodes:" + root.val);
            return 1;
        }
        return getLeafCount(root.left) + getLeafCount(root.right);
    }
}
public class Test {
    public static void main(String[] args) {
        Solution tree = new Solution();
        /* create a tree */
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(9);
        root.right = new TreeNode(20);
        root.right.left = new TreeNode(15);
        root.right.right = new TreeNode(7);
        System.out.println(tree.getLeafCount(root));
    }
}

运行结果

leaf nodes:9
leaf nodes:15
leaf nodes:7
3

参考资料

原文地址:https://www.cnblogs.com/hglibin/p/10849173.html

时间: 2024-07-28 12:34:24

求二叉树中叶子节点的个数的相关文章

C++算法之 求二叉树中叶子节点的个数 与 判断两棵二叉树是否结构相同

//叶子节点的个数 /* (1)如果二叉树为空,返回0 (2)如果二叉树不为空且左右子树为空,返回1 (3)如果二叉树不为空,且左右子树不同时为空,返回左子树中叶子节点个数加上右子树中叶子节点个数 */ int GetLeafNodeNum(BTree* root) { if(root == NULL) return 0; if(root->m_pLeft == NULL && root->m_pRight == NULL) return 1; int LeafNumOfLef

求二叉树中指定节点的深度

1 package job.huawei; 2 3 import java.util.Scanner; 4 5 public class TreeHigh { 6 7 /** 8 * 输入字符串如a1b2c2d3e3f3g4构成一颗二叉树数字表示前一个字符所在的层,最多不超过9层 9 * 求指定节点的深度 10 */ 11 public static void main(String[] args) { 12 // TODO Auto-generated method stub 13 Scann

设计一个算法,求非空二叉树中指定的第k层(k>1)的叶子节点的个数

思想:采用基于层序遍历的方法.用level扫描各层节点,若某一层的节点出队后,rear指向该层中最右节点,则将rear赋值给last(对于第一层,last=1).在出队时,若front=last,表示这一层处理完毕,让层号level增1,并置last为下一层最右节点.那么如何求一层的最右节点呢?这是因为第一层只有一个节点,它就是最右节点.对于其他层,上一层最右节点最后进队的孩子一定是该层的最右节点. 例如,对于如图所示的二叉树,求k=3的叶子节点个数的过程如下:level=1;A进队时rear=

求二叉树第K层的节点个数+求二叉树叶子节点的个数

size_t _FindLeafSize(Node* root)     //求二叉树叶子节点的个数    {        //static size_t count = 0;        if (root == NULL)            return 0; if (root->_left == NULL&&root->_right == NULL);        return 1; return _FindLeafSize(root->_right) +

编程之美3.8 求二叉树中节点的最大距离

描述:如果把二叉树看成一个图,父子节点之间的连线看成双向的,定义“距离”为两个节点之间边的个数.求二叉树中相距最远的两个节点的距离. 思路:相距最远的两个节点一定是叶子节点,且这两个叶子节点的路径有两种情况: 1. 该路径经过root节点,则两个叶子节点分属root.left和root.right为根的子树,而且是两个子树中距离root.left和root.right最远的叶子节点: 2. 该路径不经过root节点,则这两个叶子节点的root.left或root.right上: 根据以上分析,参

11求二叉树中节点的最大距离

转载请注明出处:http://www.cnblogs.com/wuzetiandaren/p/4253605.html 声明:现大部分文章为寻找问题时在网上相互转载,此博是为自己做个记录记录,方便自己也方便有类似问题的朋友,本文的思想也许有所借鉴,但源码均为本人实现,如有侵权,请发邮件表明文章和原出处地址,我一定在文章中注明.谢谢. 题目:如果我们把二叉树看成一个图,一棵树显示是一颗有向无环图,定义"距离"为两节点之间边的个数(不考虑方向).写一个程序,求一棵二叉树中相距最远的两个节点

11.求二叉树中节点的最大距离

如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义 " 距离 " 为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离,求二叉树中节点的最大距离 分析: 先画几个不同形状的二叉树,从例子中可以看出,相距最远的两个节点,一定是两个叶子节点,或者是一个叶子节点到它的根节点: 根据相距最远的两个节点一定是叶子节点这个规律,我们可以进一步讨论. 对于任意一个节点,以该节点为根,假设这个根有 K 个孩子节点,那么相距最远的两 个节点 U和 V之间的路

【编程题目】求二叉树中节点的最大距离

第 11 题(树)求二叉树中节点的最大距离...如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序,求一棵二叉树中相距最远的两个节点之间的距离. 思路:二叉树结构中只设了左右子节点的指针. 设单个结点的深度为0. 用后序遍历,得到每个结点为根的子树的最大深度.maxdistance记录该结点(左子树深度+右子树深度 + 2)是否超过已有的最远距离,若超过更新. 关键:空指针的深度设为-1,这样避免了复杂的分类讨论. 树每个结

编程之美之求二叉树中节点的最大距离

题目:如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义"距离"为两节点之间边的个数.写一个程序求一棵二叉树中相距最远的两个节点之间的距离. 分析:树上分析的很清楚,计算一个二叉树的最大距离有两个情况: 1. 路径经过左子树的最深节点,通过根节点,再到右子树的最深节点. 2. 路径不穿过根节点,而是左子树或右子树的最大距离路径,取其大者. 但是树上的代码使用了额外的节点字段,这里给出我的代码,思路是一样的: struct BinaryTree { int valu