数据结构学习

2023-05-16

四、树

所有的二叉链表都基于二叉树结点的基本定义

class BinTreeNode
{
	public:
		int data;
		BinTreeNode *leftChild;
		BinTreeNode *rightChild;
		BinTreeNode(T n,BinTreeNode *l=NULL,BinTreeNode *r=NULL)
		{
			leftChild=l;
			rightChild=r;
		}
};

1、最关键也是最基础的一道题:
 

5、统计二叉树的宽度,即在二叉树的各层上,具有结点数最多的那一层上的结点总数
先前序遍历求出每一层的宽度,再求出最大宽度,即树的宽度

每一次递归时都会碰到一个结点,每碰到一个节点就在对应位置的数组上++,因此需要一个level来计数这是第几层

这些都是基于root指向的二叉树已经建立的前提之下写出来的

void levelNumber(BinTreeNode *root,int a[],int level)
{
//level通过主函数调用的时候给值,给定的初值肯定是0
    if(root!=NULL)
    {
        a[level]++;
        levelNumber(root->leftChild,a[],level+1);
        levelNumber(root->rightChild,a[],level+1);
    }
}


//这样就可以了,每层的宽度都存储在了a[]中,只需要再比较各层的宽度即可
int width(BinTreeNode *root)
{
    int n;
    
    levelNumber(root,a,0)  //此时数组a中已经存放了所有层次的宽度
    wid=a[0];
    for(int i=0;i<)
    {
        if(a[i]>wid) wid=a[i];
    }    
    return wid;
}

6、从以t为根的二叉树中删去所有叶结点

//若二叉树非空且当前结点既是根结点也是叶结点,直接删除
//否则递归在其左右子树中删除其中的叶结点。注意参数表中引用参数t的使用
//叶结点或空树是递归到底层的情况
//对于上层的子树,总是先做递归语句、
void defoliate(BinTreeNode *root)
{
    if(root==NULL) return;
    if(root->leftChild==NULL&&root->rightChild==NULL)
    {
        delete root;
        root=NULL;
    }
    else
    {        
        defoliate(root->leftChild);
        defoliate(root0>rightChild);
    }
}

7、计算以t为根的二叉树中指点结点*p所在层次

void Level(BinTreeNode *root,BinTreeNode *p,int level)
{
    if(root==NULL) return;
    if(root==p) return level;
    Level(root->leftChild,p,level+1);
    Level(root->rightChild,p,level+1);
}

8、计算以t为根的二叉树中各结点中的最大元素的值

void Preorder_Max(BinTreeNode *root,int &max)
{
    if(root==NULL) return;
    if(root->data>max) max=root->data;
    Preorder_Max(root->leftChild,max);
    Preorder_Max(root->rightChild,max);        
}

9、以前序次序输出一颗二叉树所有结点的数据值以及结点所在层次

void Preorder(BinTreeNode *root,int level)
{
    cout<<root->data<<" "<<level;
    Preorder(root->leftChild,level+1);
    Preorder(root->rightChild,level+1);
}

10、已知一棵具有n个结点的完全二叉树被顺序存储于一维数组的T[n],试编写一个算法打印出编号为i的结点的父结点和所有子女

void printParent_Child(int T[],int i,int n,bool flag)
{
    if(i>n) return;
    if(!flag)   //相当巧妙的算法,通过flag使得打印父结点的操作只发生一次,后续的递归之中只会cout子女了 
    {
        if(i==0) cout<<"No Parent"<<" "<<cout<<"Child:";
       else cout<<"Parent:"<<cout<<T[(i-1)/2]<<endl<<"Child:"
    }
    flag=1;
    cout<<T[i];
    printParent_Child(T,2*i+1,n,flag);
    printParent_Child(T,2*i+2,n,flag);
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构学习 的相关文章

  • 基于stm32F103HAL库+cubemx+freertos无感无刷电机BLDC控制程序开发

    基于stm32F103HAL库 43 cubemx 43 freertos无感无刷电机BLDC控制程序开发 最近在做一个舵机控制项目 xff0c 控制对象为大功率无感无刷电机 xff0c 网上搜遍了资源 xff0c 貌似这方面的资源真得十分
  • C++思路

    1 统计英文单词 在进行文章重复度检查时 xff0c 经常需要统计一段英文中的单词数量 xff0c 并找出长度最长的单词 设有如下定义 xff1a char str 500 编写程序 xff0c 通过利用cin getline str 50
  • 基于OpenCV构建停车场车位识别项目

    OpenCV是一个基于 xff08 开源 xff09 发行的跨平台计算机视觉库 xff0c 能实现图像处理和计算机视觉方面的很多通用算法 车位识别的图像处理过程如图所示 在python中设置完所有内容后 xff0c 最重要的依赖关系将是Op
  • 学生成绩管理系统-python

    乱写的成绩管理系统 派森 span class token comment 定义学生类型 姓名 学号 科目 span span class token keyword class span span class token class na
  • 11_3、Java集合之迭代器Iterator接口

    一 引入 Iterator对象称为迭代器 设计模式的一种 xff0c 主要用于遍历 Collection 集合中的元素 GOF给迭代器模式的定义为 xff1a 提供一种方法访问一个容器 container 对象中各个元 素 xff0c 而又

随机推荐

  • 进程切换和进程调度的区别

    进程切换和进程调度的区别 调度是决定将系统资源分配给哪个进程 xff0c 进程切换是实际分配系统资源 另外需要注意进程切换一定会产生中断 xff0c 进行处理器模式切换 xff0c 即从用户态进入内核态 xff0c 之后又回到用户态 xff
  • 树莓派3b+安装ubuntu server,安装mysql

    1 下载镜像 http cdimage ubuntu com ubuntu releases 18 04 5 release ubuntu 18 04 5 preinstalled server arm64 43 raspi3 img xz
  • 【GVINS初体验】

    在Ubuntu18 04下跑通GVINS GVINS介绍 环境配置 1 C 11编译器 2 ROS 3 Eigen 4 Ceres 5 gnss comm Build GVINS 跑VINS啦 GVINS介绍 GVINS是一个基于非线性优化
  • 【OpenCV】基于Adaboost和Haar-like特征人脸识别

    毕设算是告一段落 xff0c 里面用了一点点人脸识别 xff0c 其实完全是OpenCV自带的 xff0c 源自两篇论文 xff1a P Viola and M Jones Rapid object detection using a bo
  • Jetson Tx2上跑MYNT_EYE的ORB SLAM示例

    愁呀 xff0c 按照官网的说明文档 xff0c 好长时间郁闷在跑不起来 每次都是在加载词袋时报bad malloc 打开MYNT EYE ORB SLAM2 Sample Vocabulary ORBvoc txt词袋看见1082073行
  • 解决ST-LINK无法连接设备(解决不了你顺着网线来打我)

    问题分析 问题描述 在mdk中 xff0c 点击下载按钮提示找不到目标设备 xff0c 无法自动下载程序 原因猜想 单片机只有在停止状态下才可以下载程序 xff1f 猜想验证 如果让单片机处在停止状态 xff0c 是不是就能正常下载了呢 x
  • tensorflow 利用tfrecords文件制作数据集

    TensorFlow之tfrecords文件详细教程 制作数据集思路 xff1a 将训练数据和测试数据生成tfrecords文件 为什么呢 xff1f 这种文件以二进制进行存储 xff0c 只占用一个内存块 对于大数据能够提高cpu效率 代
  • 解决mininet运行报错“ImportError: No module named mininet.log”

    解决mininet运行报错 ImportError No module named mininet log 运行环境 系统Ubuntu 04 安装Mininet 2 3 0d6问题描述 运行miniedit py时报错ImportError
  • C++ 用结构体和类创建单向链表

    一 结构体 include lt iostream gt using namespace std 一个链表要实现的操作有 建立链表 xff0c 遍历链表 xff0c 查找链表 xff0c 插入和删除节点 查找和遍历某种程度上来说是一样的 x
  • 巨星星座paper研究

    巨星星座paper研究 ICM1篇 Exploring the Internet from space with Hypatia Hypatia论文 xff1a 摘要 xff1a Hypatia 提出了一个框架 xff0c 通过结合这些星座
  • Ubuntu20.04中安装ns3网络仿真器

    前言 我的环境 Ubuntu 20 04 xff0c 安装的是ns3 3 33 1 安装前的准备工作 建议先了解一下ns3的文件结构 参考博客 xff1a https blog csdn net sinat 36418396 article
  • ubuntu 20.04配置ssh远程root连接

    ubuntu 20 04配置ssh远程服务 1 开启服务 etc init d ssh start 查看ssh服务状态 sudo service ssh status 正常是active xff08 running xff09 2 修改ss
  • docker 遇到的问题

    docker stop container id 失败 显示 root 64 docker stop onos1 Error response from daemon cannot stop container onos1 permissi
  • docker ubuntu20.04 dockerfile 换源

    dockerfile 换源 FROM ubuntu 20 04 ARG span class token assign left variable DEBIAN FRONTEND span span class token operator
  • Prometheus普罗米修斯-入门

    Promethus 普罗米修斯 xff09 适合k8s和docker的监控系统 功能 能够安装prometheus服务器 能够通过安装node exporter监控远程linux 能够通过安装mysqld exporter监控远程mysql
  • 数据库操作

    ubt1804 安装mqsql span class token function apt span span class token function install span mysql server span class token
  • 图的邻接表存储及图的遍历(DFS)

    图的表示方式 邻接矩阵 xff1a G N N xff0c 适合稠密图 xff0c 占用空间大 xff0c O N N 邻接表 xff1a 存储稀疏有向图 xff0c 避免空间浪费十字链表 xff1a 针对有向图 xff0c 把邻接表和逆邻
  • HTML5详细介绍及使用

    HTML5详细介绍及使用 一 HTML5简介 1 HMTL5的定义 HTML是一种用符号来创建结构文档的语义 比如标题 章节 列表 链接 引用和其他各种元素都可以包含在结构文档中 HTML5在W3C中的定义 xff1a HTML 5 是下一
  • AE10.0开发时 System.ComponentModel.LicenseException' occurred in system.windows.forms.dll

    刚开始是System ComponentModel ISupportInitialize this axMapControl1 EndInit 出现问题 后来又出现system windows forms dll 中类未注册 xff0c 您
  • 数据结构学习

    四 树 所有的二叉链表都基于二叉树结点的基本定义 class BinTreeNode public int data BinTreeNode leftChild BinTreeNode rightChild BinTreeNode T n