精华内容
下载资源
问答
  • 在二叉树中查找度为2的节点个数返回,可供参考
  • 一棵二叉树中有3叶子节点,有8个度为1节点,则该二叉树中总的节点数为? 正确答案: B 你的答案: 空 (错误) 12 13 14 15 添加笔记 收藏 纠错 解析: 有公式:N2=N0-1度为2的节点个数...

    设一棵二叉树中有3个叶子节点,有8个度为1的节点,则该二叉树中总的节点数为?

    正确答案: B   你的答案: 空 (错误)

    12
    13
    14
    15

    解析:

    有公式:N2=N0-1,度为2的节点个数是度为0的节点个数减一,所以N0=3,则N2=2,再加上N1=8,总的是13


    叶子节点数为3,所以度为2的节点数=3-1=2(这是由假设度为2的节点数为a,叶子节点为b,则b=a+1这个结论得到的,这个结论可以证明的)。所以总节点数=2+8+3=13


    展开全文
  • 度为0节点个数:n0 度为1节点个数:n1 度为2的节点个数:n2 即:n0 + n1 + n2 = n 该二叉树包含的边总数:n-1 度为0节点的边的条0 度为1节点的边的条1 度为2的节点的边的条:2 即:n - 1 = n1 +...

    在这里插入图片描述
    二叉树:节点的度最大为2
    假设一个二叉树包含的节点总数为:n
    度为0的节点个数:n0
    度为1的节点个数:n1
    度为2的节点个数:n2
    即:n0 + n1 + n2 = n
    该二叉树包含的边总数为:n-1
    度为0的节点的边的条数:0
    度为1的节点的边的条数:1
    度为2的节点的边的条数:2
    即:n - 1 = n1 + 2 n2
    n0 + n1 + n2 -1 = n1 + 2 n2
    得:n0 = n2 + 1

    展开全文
  • printf("\n叶子节点个数为:%d\n",value); break; }else { printf("\n二叉树还未创建!\n"); break; } case 4: if(s == 1) { //把 j 重置 0 ,防止多次调用该方法后, j 的累加 j = ...
    #include <stdio.h>
    #include <stdlib.h>


    typedef struct node {
    char data;
    struct node *lChild;
    struct node *rChild;
    }BinaryTreeNode;
    typedef struct {
    BinaryTreeNode *root;
    int count;
    }BinaryTree;


    BinaryTree *makeTree();
    BinaryTreeNode *makeNode(char,BinaryTreeNode *,BinaryTreeNode *); 
    int FindTreeDeep(BinaryTreeNode *);
    int FindTreeNodeOfN0(BinaryTreeNode *);
    int FindTreeNodeOfAll(BinaryTreeNode *);
    ;



    //创建每一个节点
    BinaryTreeNode *makeNode(char data,BinaryTreeNode *lChild,BinaryTreeNode *rChild) {
    BinaryTreeNode *temp = NULL;
    temp = (BinaryTreeNode *)malloc(sizeof (BinaryTreeNode));
    temp->data = data;
    temp->lChild = lChild;
    temp->rChild = rChild;
    return temp;
    }


    //此处的 s 是为了阻止还未创建二叉树,就求 高度、叶子节点数、节点总数 

    int s = 0;

    //创建二叉树

    BinaryTree *makeTree() {
    s = 1;
    BinaryTreeNode *node[10];
    BinaryTree *tree = NULL;
    //J
    node[9] = makeNode('J',NULL,NULL);
    //I
    node[8] = makeNode('I',NULL,node[9]);
    //H
    node[7] = makeNode('H',NULL,NULL);
    //G
    node[6] = makeNode('G',NULL,NULL);
    //F
    node[5] = makeNode('F',node[8],NULL);
    //E
    node[4] = makeNode('E',node[6],node[7]);
    //D
    node[3] = makeNode('D',NULL,NULL);
    //C
    node[2] = makeNode('C',NULL,node[5]);
    //B
    node[1] = makeNode('B',node[3],node[4]);
    //A
    node[0] = makeNode('A',node[1],node[2]);

    tree = (BinaryTree *)malloc(sizeof (BinaryTree));
    tree->root = node[0];
    tree->count = 10;
    printf("\n创建与初始化成功\n");
    return tree;
    }


    //求二叉树高度
    int FindTreeDeep(BinaryTreeNode *root){
    int deep=0;
      if(root){
      int lchilddeep=FindTreeDeep(root->lChild);
        int rchilddeep=FindTreeDeep(root->rChild);
          deep=lchilddeep>=rchilddeep?lchilddeep+1:rchilddeep+1;
        }
        return deep;
    }
    //求二叉树的 叶子节点个数 
    int i = 0;
    int FindTreeNodeOfN0(BinaryTreeNode *root) {
    if(root == NULL)
    return;
    if(root->lChild == NULL && root->rChild == NULL) {
    i++;
    }
    FindTreeNodeOfN0(root->lChild); 
    FindTreeNodeOfN0(root->rChild);
    return i;
    }


    //求节点总数
    int j = 0;
    int FindTreeNodeOfAll(BinaryTreeNode *root) {
    if(root == NULL)
    return;
    j++;
    FindTreeNodeOfAll(root->lChild); 
    FindTreeNodeOfAll(root->rChild);
    return j;



    int main(int argc, char *argv[])
    {
    BinaryTree *tree = NULL;
    int choice;
    int value;

    while(1) {
    printf("\n-----二叉树链表-----\n");
    printf("\n-----1.创建与初始化-----\n");
    printf("\n-----2.二叉树高度-----\n");
    printf("\n-----3.二叉树叶子节点-----\n");
    printf("\n-----4.二叉树节点总数-----\n");
    printf("\n-----0.退出-----\n");
    printf("请输入您的选择:");
    scanf("%d",&choice); 
    switch(choice) {
    case 1:
    tree = makeTree();
    break;
    case 2:
    if(s == 1) {
    value = FindTreeDeep(tree->root);
    printf("\n深度为:%d\n",value);
    break;
    }else {
    printf("\n二叉树还未创建!\n");
    break;
    }
    case 3:

    if(s == 1) {

    //把 i 重置为 0 ,防止多次调用该方法后, i 的累加

    i = 0;
    value = FindTreeNodeOfN0(tree->root);
    printf("\n叶子节点个数为:%d个\n",value);
    break;
    }else {
    printf("\n二叉树还未创建!\n");
    break;
    }
    case 4:

    if(s == 1) {

    //把 j 重置为 0 ,防止多次调用该方法后, j 的累加

    j = 0;
    value = FindTreeNodeOfAll(tree->root);
    printf("\n节点总数为:%d个\n",value);
    break;
    }else {
    printf("\n二叉树还未创建!\n");
    break;
    }
    case 0:
    return 0;
    break;
    default:
    printf("您的选择有误!");
    break;
    }
    }

    }

    其中求二叉树的高度那个方法,有图帮助理解,参考链接:二叉树的深度,递归和非递归实现

    展开全文
  • // 参数:二叉树节点root // 返回:二叉树的深度 { // 请这里补充代码,完成本关任务 /********** Begin *********/ int m; int n; if(root==NULL) { return 0; } else { m=GetTreeD
    #include "binary_tree.h"
    
    int GetTreeDepth(BiTreeNode* root)
    // 计算该二叉树的深度
    // 参数:二叉树根节点root
    // 返回:二叉树的深度
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        int m;
        int n;
        if(root==NULL)
        {
        return 0;
    
        }
        else {
         m=GetTreeDepth(root->right);
         n=GetTreeDepth(root->left);
         if(m>n)
         {
         return m+1;
         }
         else return n+1;
    
        }
    
        /********** End **********/
    }
    
    int GetNodeNumber(BiTreeNode* root)
    // 计算该二叉树的总节点个数
    // 参数:二叉树根节点root
    // 返回:二叉树的总节点个数
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        if(root==NULL)
        {
        return 0;
        }
        else return GetNodeNumber(root->left)+GetNodeNumber(root->right)+1;
        
        
        /********** End **********/
    }
    
    int GetLeafNodeNumber(BiTreeNode* root)
    // 计算该二叉树的叶子节点个数
    // 参数:二叉树根节点root
    // 返回:二叉树的叶子节点个数
    {
        // 请在这里补充代码,完成本关任务
        /********** Begin *********/
        if(root==NULL)
        return 0;
        else if(root->left==NULL&&root->right==NULL)
        return 1;
        else
        return GetLeafNodeNumber(root->left)+GetLeafNodeNumber(root->right);
        
        
        /********** End **********/
    }
    
    
    
    展开全文
  • 设:节点个数为n,叶子节点个数为n0n_0n0​,度为1节点个数为n1n_1n1​,度为2的节点个数为n2n_2n2​,边的个数b。 n = n0n_0n0​ + n1n_1n1​ + n2n_2n2​ b = n - 1 可得 b = n0n_0n0​ + n1n_1n1​ + n2n_...
  • int NumberOfZeroDegree(BTNode *T)//求二叉树中度为1节点个数  {  int i=0;  if(NULL != T)  {  if(NULL==T->lchild && NULL==T->rchild)  {  i=1;
  • 统计二叉树中度为01,2的节点个数

    千次阅读 多人点赞 2018-11-19 20:01:49
    int NumsDegree_0(BiTree T) { if(T) { if(T-&gt;left == NULL &amp;&amp; T-&gt;right == NULL) return 1; else return NumsDegree_0(T-&gt;left)+NumsDegree_0(T-&gt;right);...
  • 一棵二叉树的高度以及求一个节点的左右子树的高度 前言: 最近学习平衡二叉排序树时,计算二树的高度时笔者学到了种相当精妙的算法,此分享一下。 问题: 根据如上图构建一棵二叉树,并求出它的高度。...
  • 二叉树节点数为N N=n0+n1+n2 N=n22+n11+n0*0+1 解得:n0=n2+1
  • 完全二叉树节点计算基本是几类,要么是求完全二叉树中的叶子节点个数或者度为1或者2的节点的个数。 其实这些问题根本上一一类问题,求解方法也是基本相同的。 先把题列出来: 一棵完全二叉树具有1000结点,...
  • 题目:已知一棵完全二叉树,求其节点的个数要求:时间复杂度低于O(N),N树的节点个数完全二叉树的概念就不多叙述了。讲讲思路:题目的要求是时间复杂度低于O(N),所以遍历的方式就不用考虑了,根据完全二叉树...
  • java实现二叉树的相关操作 代码如下 package 二叉树有关; import java.util.ArrayDeque; import java.util.Queue; public class CreateTree { /** * @param args */ publ...
  • 首先我们要结点类里加一个bool类型的函数用于判断该结点是否为1???? //判断结点是否为1 bool isAlone() { if (leftchild == NULL && rightchild != NULL) { return true; } else if(left...
  • 首先说说什么是:通俗的讲二叉树中连接节点节点的线就是,有n个节点,就有n-1个度节点数总是比要多一,那么度为0节点一定是叶子节点,因为该节点的下面不再有线;度为1节点即:该节点只有一个分支;...
  • 二叉树第k层的节点个数

    万次阅读 2020-06-12 15:15:23
    思路:求第k层节点数量,等于求以根节点的左孩子根的k-1节点数,加上以根节点的右孩子根的k-1节点数。 /** * 求二叉树第k层的节点个数 * * @param root * @param k * @return */ public int ...
  • 证明: ... 又因为二叉树中,除了根节点所有的节点都有一个进入节点的分支,假设B所有的分支,那么n=B+1;  又因为这些分支都是由度为1度为2的节点射出,所以B=n1+n2*2; 所以B+1=n0+n1+n2;...
  • #include ...#include<stdbool.h>/*实现求二叉树的高度,宽度、节点个数、叶子节点个数*/ typedef struct NODE { int data; struct NODE *lchild,*rchild; }TNode,*PTNode; PTNode createtree() { PTN
  • 参考资料 http://blog.csdn.net/u013227200/article/details/37992463
  • 设叶子节点个数为n0度为1节点个数为n1,度为2的节点个数为n2,必有 n0+n1+n2 = n (1) 对于二叉树有: n0 = n2+1 (2) 由上面两式 ==&gt; n0 = (n+1-n1)/2 ,n2 = (n-1-n1)/2 (3) 由完全二叉树的性质可知:...
  • 一个二叉树有100个子节点数为2的节点,100个子节点数为1节点,那么个子节点数为0节点(叶节点)的个数: A. 101 B. 100 C. 200 D. 300 E. 99 F. 1  正确答案(A) 解析:  由题可知,该树为一个...
  • 二叉树-求叶节点个数

    2021-03-20 11:19:43
    对任何一棵二叉树度为0的结点数(即叶节点) = 度为2的节点数 + 1; 当二叉树的总个数为奇数时,此二叉树"无度为1"的结点 当二叉树的总个数为偶数时,此二叉树"只有一个度为1"的结点 设:度为2的结点数n 度为0的...
  • 一棵高度平衡二叉树定义一个二叉树个节点 的左右两 个子树的高度差的绝对值不超过1。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二叉树 [1,2...
  • 给定一棵二叉树,找到两个节点的最近公共父节点(LCA)。 最近公共祖先是两个节点的公共的祖先节点且具有最大深度。 可以查看连接:https://blog.csdn.net/wenqiwenqi123/article/details/79952043 ...
  • 设总节点个数为n,叶子节点个数为n0度为1节点个数为n1,度为2的节点个数为n2,则必有 n0+n1+n2 = n …(①) (1) 对于二叉树有: n0 = n2+1…(②) (什么呢?下面证明一下) 【注】(1)这规律是所有...
  • 掌握了二叉树的先序遍历递归算法、中序遍历递归算法和后序遍历递归算法的实现流程后,我们稍微开拓一下视野,来看一下该如何求出二叉树中度为0度为1度为2的结点的个数. 设计算法之前,我们要弄清什么是...
  • 若设二叉树的深度h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中最左边,这就是完全二叉树。 首先判断根节点的右子树的左边界。 左子树的左边界最后层。 说明...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 68,280
精华内容 27,312
关键字:

在一棵二叉树中,度为0的节点个数