二叉树

完美二叉树, 完全二叉树和完满二叉树 完美二叉树、完全二叉树和完满二叉树 完美(Perfect)二叉树,完全(Complete)二叉树和完满(Full)二叉树的区别。 树(Tree) 树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。 树的基本术语 Root 根,树的顶端结点 Child 孩子,当远离根(Root)的时候,直接连接到另外一个结点的结点被称之为孩子(Child); Pare 阅读详情

练习题
根据输入构建一个二叉树。
输入
第一行为树的根结点,从第二行开始,每行有三个字符,第一个字符是第三个字符的父结点。中间字符为L时表示第三个字符是第一个字符的左子树,R表示右子树。输入以0结束。
输出
该二叉树的先、中、后和层次遍历,最后输出树的深度。

#include<iostream>
#include<fstream>
#include<malloc.h>
#include<queue>
using namespace std;
ifstream stream("input.txt");
typedef struct BiTNode
{
   char data;
   struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
}BiTNode,*BiTree;

void findparentandCreate(BiTree &T,char parent,char ch,char child)
{
     if(T) /* T不空 */
  {
        if(T->data != parent)
  {
      findparentandCreate(T->lchild,parent,ch,child);
            findparentandCreate(T->rchild,parent,ch,child);
  }
     else
  {
   switch(ch){
   case 'l':
   case 'L':
    T->lchild=(BiTree)malloc(sizeof(BiTNode));
                if(!T->lchild)
                   exit(1);
                T->lchild->data=child; /* 生成根结点 */
    T->lchild->lchild = NULL;
    T->lchild->rchild = NULL;
    return;
   case 'r':
   case 'R':
    T->rchild=(BiTree)malloc(sizeof(BiTNode));
                if(!T)
                   exit(1);
                T->rchild->data=child; /* 生成根结点 */
    T->rchild->lchild = NULL;
    T->rchild->rchild = NULL;
    return;
   }
  }
 }

}
void CreateBiTree(BiTree &T)// *T = t
{  
 
 char parent,ch,child;
   
  T=(BiTree)malloc(sizeof(BiTNode));
        stream>>T->data; /* 生成根结点 */
  T->lchild = NULL;
  T->rchild = NULL;
     while(stream>>parent&&!stream.eof())
  {
     if(parent!='0')
     {
    stream>>ch>>child;
    findparentandCreate(T,parent,ch,child);
           
     }//if
     else{ return ;}
  }//while
}
void PreOrderTraverse(BiTree T)
 {
   if(T) /* T不空 */
   {
     cout<<T->data;
     PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */
  PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */
   }
 }
void InOrderTraverse(BiTree T)
 {
   if(T)
   {
     InOrderTraverse(T->lchild); /* 先中序遍历左子树 */
     cout<<T->data; /* 再访问根结点 */
     InOrderTraverse(T->rchild); /* 最后中序遍历右子树 */
   }
 }
void PostOrderTraverse(BiTree T)
 {
   if(T) /* T不空 */
   {
     PostOrderTraverse(T->lchild); /* 先后序遍历左子树 */
     PostOrderTraverse(T->rchild); /* 再后序遍历右子树 */
     cout<<T->data; /* 最后访问根结点 */
   }
 }
void LevelOrderTraverse(BiTree T)
 {
   queue<BiTree>q;
   BiTree a;
   if(T)
   {
     q.push(T);
     while(!q.empty())
     {
       a=q.front();
    q.pop();
       cout<<a->data;
       if(a->lchild!=NULL)
         q.push(a->lchild);
       if(a->rchild!=NULL)
         q.push(a->rchild);
     }
     printf("/n");
   }
 }
int BiTreeDepth(BiTree T)
{ /* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */
    int hl=0,hr=0,max=0;
    if(T!=NULL)
 {  hl=BiTreeDepth(T->lchild);
    hr=BiTreeDepth(T->rchild);
    max=hl>hr?hl:hr;
    return max+1;
 }
 else{ return 0;}

}
void main()
{
    BiTree T;
    CreateBiTree(T);
    PreOrderTraverse(T);
 cout<<endl;
    InOrderTraverse(T);
 cout<<endl;
    PostOrderTraverse(T);
 cout<<endl;
 LevelOrderTraverse(T);
    int depth=BiTreeDepth(T);
 cout<<depth-1 <<endl;
}

输入样例                         输出样例                          
   A                                ABDGCEHFI
   A L B                            DGBAHECFI
   A R C                            GDBHEIFCA
   B L D                            ABCDEFGHI
   D R G                            3
   C L E
   C R F
   E L H
   F R I
   0

查找二叉树、完全二叉树、线索二叉树、最优二叉树 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、查找二叉树(二叉排序树)二、完全二叉树 前言 2021年上半年 软件设计师 上午试卷中有这样一道题 58.当二叉树的结点数目确定时,________的高度一定是最小的。 A.二叉排序树 B.完全二叉树 C.线索二叉树 D.最优二叉树 我已此为契机,了解一下查找二叉树、完全二叉树、线索二叉树、最优二叉树的一些相关定义(此题结尾会给出答案详解) 一、查找二叉树(二叉排序树) 二叉排序树的定义: 1、若根结点的左子树. 阅读详情

相关推荐

【数据结构】基础二叉树、真二叉树、满二叉树、完全二叉树、二叉树的遍历

树的介绍 简单的看一下树形结构: 生活中的树形结构: 树(Tree)的基本概念 节点:上面的树形结构,是由若干个节点和节点之间,连接起来构成的结构,ABCDEFGH都是一个单独的节点。最上面的节点成为根节点。 根节点:根节点是树层次结构中的最高节点。换句话说,根节点是没有任何父节点的节点。 父节点和子节点:上面的B节点就是E和F节点的父节点,E和F节点就是B节点的子节点。 兄弟节点:拥有相同父节点的节点称为兄弟节点,例如 E和F节点拥有相同的父节点B,所以两者称为兄弟节点。反之 E和G节点没有相同的

一个写湿的程序猿 3735

二叉树创建并输入输出(链式结构)

二叉树创建并输入输出(链式结构)

q322359的博客 9473

什么是二叉树

1.什么是二叉树?   面试中总有公司会问到二叉树问题,你会不一定能通过面试,但是不会肯定不行,那二叉树到底是什么?   二叉树作为一种重要的树形结构类型,在实际应用中有着十分广泛的应用和重要的意义。因为从许多实际问题中抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能够简单地转换为二叉树形式,而且二叉树的存储结构及其算法都比较简单,因此我们将讨论关于二叉树的存储、运算及应用。 2.二叉树的...

inhacker的博客 5226

C语言二叉树基本操作

【代码】C语言二叉树基本操作。

qq_27638851的博客 3872

普通二叉树

1.什么是二叉树 树是一种比较重要的数据结构,它可以是二叉树,三叉树,可以说多叉树,但是我们今天是来看二叉树。二叉树是使用最广的树,二叉树是n个结点的有限集合,该集合为空集时候,就是我们空二叉树。或者有一个根结点有两棵互不相交的树分别称为左子树和右子树(或左孩子和右孩子),其次序不能任意颠倒。 画张图看一下   根结点:                           结点A 分...

xiaohui987987的博客 2450

二叉树的建立,输入结点字符,以及前中后序遍历

由用户输入字符建立二叉树。用户选择前序、中序、后序遍历。

二叉树的输入和输出

先序递归输入,中序和后序递归输出

充满焦虑的大学生 1543

Lossless-Claw 插件实战:告别上下文截断,让 OpenClaw 永不遗忘

本文介绍了OpenClaw的Lossless-Claw插件,这是一个基于LCM论文的DAG摘要系统,能有效解决上下文截断问题。文章包含10个部分,从插件原理到实操指南: 核心原理:通过DAG结构持久化存储所有原始消息,将旧消息分块摘要并形成层级结构,保持上下文在模型Token限制内。 性能优势:在OOLONG基准测试中得分74.8,优于Claude Code的70.3,尤其在长上下文场景表现更佳。 功能特点: 提供lcm_grep、lcm_describe等工具主动回忆历史 摘要始终链接回原文,实现真正无损

u014798858的博客 2619

C语言数据结构 二叉树的各种操作

设树结点的元素类型为char,实现以下二叉树的各种基本操作的程序: ② 建立不少于10个结点的二叉树T; ② 用非递归方式先序遍历方式输出树T的结点; ③ 用非递归方式中序遍历方式输出树T的结点; ④ 用后序遍历方式输出树T的结点; ⑤ 用层次遍历方式输出树T的结点; ⑥ 输出树T的深度; ⑦ 输出树T的叶子结点和非叶子结点; ⑧ 判断该二叉树是否为完全二叉树(层次遍历); ⑨ 主函数通过函数调用实现以上各项操作。

Kuzma66的博客 2329

基于ADS\HFSS\Matlab的平面带通发夹滤波器设计

写在最前面,前段时间完成了一个小项目,实现13.5~14GHz的带通滤波器,算是第一个微波项目,在老师、学长、各种大神的指点下,最终完成了指标,想来这段时间收获良多,想到老师教导的,有能力的话要尽可能帮助别人,以及网络上很少面向于小白的教程,于是决定把自己做这个小项目的经过,一些关键步骤,还有软件操作和公式讲解都发出来,供大家指正借鉴。由于我目前大三,刚学习电磁场、微波工程等等,技术实在有限,同时这样是我第一次发帖子,只能尽可能的将自己确认过正确的内容,步骤以及一些经验写出来,供大家借鉴。

likaifeng12138的博客 5221

IEC61850 通信协议测试验证实战指南:从理论到实践

本文提供了一份全面的IEC61850通信协议测试验证实战指南,强调测试必须从理论走向工程实践。文章详细讲解了如何搭建测试环境,并深入剖析了MMS、GOOSE、SV三大核心协议的实战测试方法,旨在帮助工程师通过系统化的测试验证,确保电力自动化设备的互操作性与通信可靠性。

weixin_29204121的博客 171

二叉树的简单输入输出

二叉树二叉树存储的方式先序创建(难点)遍历先序遍历中序遍历后序遍历验证 话不多说,码来 二叉树存储的方式 typedef struct Node { char data;//存储数据 struct Node *LChild;//左儿子 struct Node *RChild;//右儿子 }BNode,*BTree; 以下的存储和遍历我们亦该图来说明 先序创建(难点) 这里的创建主要需要理...

weixin_44731936的博客 1万+

深入解析Incapsula reese84的生成机制与绕过策略

本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。

weixin_29256771的博客 443

二叉树(完美二叉树、完全二叉树、完满二叉树)

二叉树(完美二叉树、完全二叉树、完满二叉树)树的概念树的基本术语二叉树(Binary Tree)什么是二叉树(Binary Tree)二叉树的性质完美二叉树(Perfect Binary Tree)完全二叉树(Complete Binary Tree)完满二叉树(Full Binary Tree)比较区分完美二叉树 v.s. 完全二叉树完满(Full)二叉树 v.s. 完全(Complete)二叉...

老人家独爱茉莉的博客 3万+

k3s快速搭建k8s集群环境

k8s 搭建方式有多种,如果你是内网环境,希望占用服务器资源少或是边缘系统(如ARM系统),强烈推荐您使用 k3s进行安装 目录k3s 简介k3s架构中文官方文档三台服务器快速搭建k8s集群安装说明步骤1 修改主机名,保持唯一步骤2 安装docker步骤3 安装master节点步骤4 安装worker节点加入集群步骤5 查看集群步骤6 部署 k8s仪表盘 dashboard k3s 简介 轻量级 Kubernetes。安装简单,内存只有一半,所有的二进制都不到 100MB K3s 是一个完全符合 Ku.

gzt19881123的专栏 2445

用KalmanNet搞定非线性状态估计:当卡尔曼滤波遇上神经网络

本文深入探讨了KalmanNet如何将神经网络与卡尔曼滤波结合,以解决非线性状态估计中的模型失配和噪声不确定性问题。通过保留经典滤波框架并用RNN学习卡尔曼增益,该方法在无人机导航、机器人定位等场景中实现了模型驱动与数据驱动的优势互补,提升了估计的鲁棒性和灵活性。

mango的博客 312

二叉树、平衡二叉树、完全二叉树、满二叉树

基本概念结点的层次(Level)从根开始定义,根为第一层,根的孩子为第二层。二叉树的高度:树中结点的最大层次称为树的深度(Depth)或高度。 二叉树在计算机科学中,二叉树是每个结点最多有两个子树的有序树。通常子树的根被称作“左子树”(left subtree)和“右子树”(right subtree)。二叉树常被用作二叉查找树和二叉堆。二叉树的每个结点至多只有二棵子树(不存在

Terry的IT世界 9万+

【正点原子STM32连载】第六十章 串口IAP实战:从Bootloader到APP的无缝升级

本文以正点原子STM32F103开发板为例,详细讲解了串口IAP(在应用编程)技术的实现原理与实战步骤。内容涵盖Bootloader与APP的分工、FLASH空间规划、核心代码解析以及Ymodem协议的应用,旨在帮助开发者掌握通过串口为嵌入式设备实现远程固件升级的关键技术,提升产品维护与迭代效率。

weixin_29161719的博客 445

完美二叉树、完全二叉树、完满二叉树

1、二叉树(Binary Tree) 1.1 什么是二叉树(Binary Tree) 每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。 1.2 二叉树的性质 若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i&amp;amp;amp;gt;=0)。 高度为k的二叉树最多有2^(k+1) - 1个结点(k&amp;amp;amp;gt;=-1)。 (空树的高...

pg的博客 2万+

56、CAN总线RC低通滤波器截止频率计算与实战

本文详细探讨了CAN总线RC低通滤波器的设计与应用。作者通过实际项目案例,分析了CAN总线噪声频谱特性,提出截止频率计算的"黄金法则",强调需考虑收发器输入阻抗的并联效应。文章给出RC参数选择的经验值(R=100Ω-1kΩ,C=10pF-100pF),并指出PCB布局的关键要点:RC应紧贴收发器引脚,电容接地端需直接连接地平面。最后建议结合示波器和眼图验证效果,并提醒RC滤波器只是抗干扰方案的一部分,良好的PCB布局设计才是根本。

2401_88858637的博客 71

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最全二叉树:完整详解二叉树的遍历以及完全二叉树等6种二叉树

树在数据结构中占据了非常重要的位置,尤其是二叉树。经常是在java面试中必问的一个环节,而且二叉树的应用场景真的非常普遍,需要重点掌握好。 但是一直以来,很多同学对于二叉树的掌握都是不太全面。今天我就来谈谈二叉树,希望你喜欢这个Java数据结构与算法这个专题,认真看完后你会对二叉树会有一个比较完整的了解。 重点会谈到以下几点: 二叉树 二叉树的遍历方式 二叉树有哪些种类 满二叉树 完全二叉树 二叉搜索树 平衡二叉树(AVL) 左旋与右旋 1.什么是二叉树 二叉树:就是每个节点都只能有两个子节点的树结构.

lyl5454的博客 3828

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

二叉树,完全二叉树,满二叉树,完美二叉树(有图干货)

二叉树:树中每个节点至多有两个子节点 【最普通的二叉】 二叉搜索树:对于树中任何节点,如果其左子节点不为空,那么该节点的value值永远>=其左子节点;如果其右子节点不为空,那么该节点的value值永远<=其右子节点 【回顾一下中序遍历】 满二叉树(Full Binary Tree):树中除了叶子节点,每个节点都有两个子节点 美国NIST给出的定义为: A...

J.R.Leonardo的博客 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

二叉树、完全二叉树、完满二叉树、满二叉树

简单定义:每个节点最多只有2个子节点的树叫做二叉树。专业定义:二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。下图为一棵普通二叉树。

流华追梦的专栏 2853

二叉树详解:带你掌握二叉树

因为二叉树是一种特殊的树,所以想要学习好二叉树,必须了解树型结构,知道树的基本概念。所以正式开始学习之前,在前面为大家引入了树的概念。这篇博客主要为大家带来树及二叉树的基本概念,性质,遍历方式等,下篇博客将为大家带来代码的实现以及应用。期待大家关注!最后,祝大家61快乐,天天开心!

是小辰 1280
上一篇: Microsoft程序员测试题(一些高难度智力题)
下一篇: 点集矩阵
sun_top
博客等级 码龄18年 54粉丝 52原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值