【数据结构】---二叉树类型部分练习解析让你更深程度了解二叉树

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 数据结构学习第十七弹——二叉树类型部分练习

🌟一、第一种:二叉树性质类型:


二叉树性质:

若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个结点.

若规定根节点的层数为1,则深度为h的二叉树的最大结点数是 2h -1.

对任何一棵二叉树, 如果度为0其叶结点个数为 n, 度为2的分支结点个数为m ,则有n =m+1

若规定根节点的层数为1,具有n个结点的满二叉树的深度,h=log2(n+1) . (ps:log2(n+1)是log以2为底,n+1为对数)

对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有节点从0开始编号,则对于序号为i的结点有:

若i>0,i位置节点的双亲序号:(i-1)/2;i=0,i为根节点编号,无双亲节点

若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子

若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子

***具体可看***:【数据结构】— 博主拍了拍你并向你扔了一“棵”二叉树(概念+结构)

🌏1.1 第一题:


某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为(***B***)

A 不存在这样的二叉树

B 200

C 198

D 199

💫1.1.1 理论:


***关于二叉树的度具体可看***:【数据结构】— 博主拍了拍你并向你扔了一“棵”二叉树(概念+结构)

节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6:B C D E F G

💫1.1.2 图解:


💫1.1.3 解析:


某二叉树共有 399 个结点,其中有 199 个度为 2 的结点(n2),则该二叉树中的叶子结点数(n0)为

这就相当于知道了度为2的让你度为1的代入公式:n0=n2+1 <==> n0=199+1<=>20

🌏1.2 第二题:


在具有 2n 个结点的完全二叉树中,叶子结点个数为(***A***)

A n

B n+1

C n-1

D n/2

💫1.2.1 理论:


完全二叉树度为1的节点个数最多有一个,最少有0个

💫1.2.2 图解:


🌏1.3 第三题:


一棵完全二叉树的节点数位为531个,那么这棵树的高度为(***B***)

A 11

B 10

C 8

D 12

💫1.3.1 理论推理:


高度为h的满二叉树的节点数量:2^h-1

***具体推论可以看:***【数据结构】— 博主拍了拍你并向你扔了一“棵”二叉树(概念+结构)

排除法带入可以算出带入10是可以满足的算出大致范围是[512 1023]

512(代表前9层是满的然后第十层有一个所以2^9-1+1 == 512)

1023(代表满二叉树2^10-1=1024)

🌟二、第二种:二叉树遍历+创建类型:


🌏2.1 牛客题目:


💫 题目:KY11 二叉树遍历


描述

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。 例如如下的先序遍历字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

输入描述:

输入包括1行字符串,长度不超过100。

输出描述:

可能有多组测试数据,对于每组数据, 输出将输入字符串建立二叉树后中序遍历的序列,每个字符后面都有一个空格。 每个输出结果占一行。

🌏2.2 链接:


KY11 二叉树遍历

🌏2.3 代码:


对于为什么传i的地址而不是传值可以看力扣—二叉树OJ题(多种题型二叉树)

#include <stdio.h>
#include<stdlib.h>
typedef int BTDataType;
typedef struct BinaryTreeNode
{
  BTDataType data;
  struct BinaryTreeNode* left;
  struct BinaryTreeNode* right;
}BTNode;
BTNode* BuyNode(BTDataType x)
{
  BTNode* node = (BTNode*)malloc(sizeof(BTNode));
  if (node == NULL)
  {
    perror("malloc fail");
    return NULL;
  }
  node->data = x;
  node->left = NULL;
  node->right = NULL;
  return node;
}
BTNode* CreatTree(char* a,int* pi)
{
    if(a[*pi]=='#')
    {
        (*pi)++;
        return NULL;
    }
    BTNode* root=BuyNode(a[*pi]);
    (*pi)++;
    root->left=CreatTree(a,pi);
    root->right=CreatTree(a,pi);
    return root;
}
void InOrder(BTNode* root)
{
    if(root==NULL)
    return;
    InOrder(root->left);
    printf("%c ",root->data);
    InOrder(root->right);
}
int main() 
{
    int i=0;
    char a[100];
    scanf("%s",a);
    BTNode* root=CreatTree(a,&i);
    InOrder(root);
    return 0;
}

🌏2.4 流程图:


根据创建好的二叉树再采用中序遍历打印具体可以看***【数据结构】—几分钟简单几步学会手撕链式二叉树(上)***


😽总结


😽Ending,今天的二叉树类型部分练习解析的内容就到此结束啦~,如果后续想了解更多,就请关注我吧

相关文章
|
5天前
|
存储 机器学习/深度学习 算法
C 408—《数据结构》图、查找、排序专题考点(含解析)
408考研——《数据结构》图,查找和排序专题考点选择题汇总(含解析)。
56 29
|
5天前
|
存储 机器学习/深度学习 人工智能
C 408—《数据结构》易错考点200题(含解析)
408考研——《数据结构》精选易错考点200题(含解析)。
58 27
|
30天前
|
Java C++
【C++数据结构——树】二叉树的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现二叉树的基本运算。​ 相关知识 创建二叉树 销毁二叉树 查找结点 求二叉树的高度 输出二叉树 //二叉树节点结构体定义 structTreeNode{ intval; TreeNode*left; TreeNode*right; TreeNode(intx):val(x),left(NULL),right(NULL){} }; 创建二叉树 //创建二叉树函数(简单示例,手动构建) TreeNode*create
46 12
|
30天前
|
C++
【C++数据结构——树】二叉树的性质(头歌实践教学平台习题)【合集】
本文档介绍了如何根据二叉树的括号表示串创建二叉树,并计算其结点个数、叶子结点个数、某结点的层次和二叉树的宽度。主要内容包括: 1. **定义二叉树节点结构体**:定义了包含节点值、左子节点指针和右子节点指针的结构体。 2. **实现构建二叉树的函数**:通过解析括号表示串,递归地构建二叉树的各个节点及其子树。 3. **使用示例**:展示了如何调用 `buildTree` 函数构建二叉树并进行简单验证。 4. **计算二叉树属性**: - 计算二叉树节点个数。 - 计算二叉树叶子节点个数。 - 计算某节点的层次。 - 计算二叉树的宽度。 最后,提供了测试说明及通关代
42 10
|
30天前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
47 2
|
2月前
|
数据库
数据结构中二叉树,哈希表,顺序表,链表的比较补充
二叉搜索树,哈希表,顺序表,链表的特点的比较
数据结构中二叉树,哈希表,顺序表,链表的比较补充
|
3月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
315 9
|
3月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
50 1
|
30天前
|
存储 C语言 C++
【C++数据结构——栈与队列】顺序栈的基本运算(头歌实践教学平台习题)【合集】
本关任务:编写一个程序实现顺序栈的基本运算。开始你的任务吧,祝你成功!​ 相关知识 初始化栈 销毁栈 判断栈是否为空 进栈 出栈 取栈顶元素 1.初始化栈 概念:初始化栈是为栈的使用做准备,包括分配内存空间(如果是动态分配)和设置栈的初始状态。栈有顺序栈和链式栈两种常见形式。对于顺序栈,通常需要定义一个数组来存储栈元素,并设置一个变量来记录栈顶位置;对于链式栈,需要定义节点结构,包含数据域和指针域,同时初始化栈顶指针。 示例(顺序栈): 以下是一个简单的顺序栈初始化示例,假设用C语言实现,栈中存储
138 77
|
30天前
|
存储 C++ 索引
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】
【数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】初始化队列、销毁队列、判断队列是否为空、进队列、出队列等。本关任务:编写一个程序实现环形队列的基本运算。(6)出队列序列:yzopq2*(5)依次进队列元素:opq2*(6)出队列序列:bcdef。(2)依次进队列元素:abc。(5)依次进队列元素:def。(2)依次进队列元素:xyz。开始你的任务吧,祝你成功!(4)出队一个元素a。(4)出队一个元素x。
42 13
【C++数据结构——栈与队列】环形队列的基本运算(头歌实践教学平台习题)【合集】

热门文章

最新文章

推荐镜像

更多