深入讲解二叉树——适合新手

二叉树

对于一棵二叉树,我们知道他是树的一种特殊情况,但二叉树在满足某些条件的情况下可以描述大部分树!

对于新学习树的同学,我就先引入树的一些概念:

一个树是由n个元素组成的有限集合,每个元素我们叫做节点(node),特定的节点,叫根节点或者树根(root)

一棵树至少是有一个节点的;其他概念我们在接下来的代码中会引入



这是不是很想一棵二叉树呢,其实二叉树的子节点只有1个,2个,或者没有,其余注意的地方会在下一篇中讲到

首先我们来讲一个怎么储存树

稍微简单点的方法  数组,称为父亲表示法

const int  m=10;

struct node{

int data,parent;

};

node tree[m];

这个不推荐使用,因为效率低下

还有很多方法这里不一一赘述

下面给出主要实现代码

typedef struct BTNode *Position;
typedef Position BTree;
struct BTNode
{
    char data;
    Position lChild, rChild;
};

BTree CreateBTree(BTree bt, bool isRoot)
{
    char ch;
    if (isRoot)
        printf("Root: ");
    fflush(stdin);
    scanf("%c", &ch);
    fflush(stdin);
    if (ch != ‘#‘)
    {
        isRoot = false;
        bt = new BTNode;
        bt->data = ch;
        bt->lChild = NULL;
        bt->rChild = NULL;
        printf("%c‘s left child is: ", bt->data);
        bt->lChild = CreateBTree(bt->lChild, isRoot);
        printf("%c‘s right child is: ", bt->data);
        bt->rChild = CreateBTree(bt->rChild, isRoot);
    }
    return bt;
}

下面给出一个中序遍历的代码,自己没有测试,但思路是正确的

#include<bits/stdc++.h>
using namespace std;
struct node
{
node *lchild;
node *rchild;
char data;
}bitreenode,*bitree;
void createbitree(bitree &t)
{
char c;
cin>>c;
if("#"==c)
t==NULL;
else
{
t=new bitreenode;
t->data=c;
createbitree(t->lchild);
createbitree(t->rchild);
}
}
void pre(bitree t)
{
if(t)
{
cout<<t->data<<" ";
pre(t->lchild);
pre(t->rchild);
}
}
int main()
{
bitree t;
createbitree(t);
pre(t);
return 0;
}

时间: 2024-11-14 12:07:19

深入讲解二叉树——适合新手的相关文章

开发者证书讲解 非常适合新手

找到的一篇非常不错的讲解开发者证书的文章  简介明了  虽在此分享一下 首先打开苹果的开发者网站(Tips:这里我就不贴网址了) 点击网站上方的MemberCenter,会跳转到登录界面(Tips:如果登录过,并选择了浏览器保存此密码的时候,默认是登录状态). 2 如图所示输入你的开发者账号和密码. 输入完成后点击"Login"(Tips:左边是注册,下边是找回密码,右边是登录,如果没有开发者账号,则需要用苹果账号申请开发者,这里不多说申请过程以及找回过程). 3 登录后的界面如图所示

在线编辑流程图怎样操作,分享适合新手使用的流程图软件工具

流程图在生活,工作,学习中都是高频出现的,不管时代怎样变,流程图的作用都不会变,那什么是流程图请添加链接描述呢?怎样制作流程图呢?下面我来为大家讲解一下. 什么是流程图?流程图是对过程算法的一种图像表示,可以将复杂的工作题目的解题方法用简洁的流程图绘出来,这样可以更直观的看清问题所在.它也被称为"输出图"可以是生产线亦或者是完成一项任务的过程. 流程图元素含义是什么?不同的元素符号在流程图中代表不同的含义,严谨的工作可以让我们很容易区分出来,如下图表所示. 画流程图有什么作用?一张简明

10步教你学会简单的MVC架构的java程序(适合新手)

适合新手,大拿手下留情,谢谢! 第1步:安装Oracle数据库,安装过程不赘述了: 第2步:新建一个账号zwp_test //创建临时表空间 create temporary tablespace zwp_test_temp tempfile 'F:\app\Administrator\oradata\zwp_test_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; //创建数

汉化入门教程Ⅱ(绝对适合新手)By:1595901624

距离上一篇帖子,有一段时间了,为普及全民汉化,我再写这篇进阶教程 [疑问]在上一篇帖子有些网友,对某些问题有疑问,我在这里解答下: 疑问1.软件加了壳是否就没办法汉化了?答:是可以汉化的,因为Radialix带有自动脱壳功能. 疑问2.对于某些软件,为什么我已经汉化了,运行程序还是英文(或者汉化完不生成汉化资源文件)?答:由于上篇教程是初级教程,所以对于某些软件要特殊对待. 以上问题我会在今天的教程中,做详细解答: 今天用到的软件有:1.Radialix 32.SavageEd1.46(一款很小

汉化入门教程(绝对适合新手) By:1595901624

高手勿喷,此汉化教程仅适合新手,高手请绕道 有人说图片太小,我不太会弄,word文档已上传 本文所用到的所有软件都会上传到百度云盘 所谓汉化就是,将非中文的软件国语化,我们我们常见的需要汉化软件大部分都是英文的,汉化软件很多,当然一款汉化软件并不能汉化所有的软件,通俗地讲,有的软件需要特定的软件来汉化,而今天所用的本地化软件叫做Radialix 3(以下简称该软件),一款强大的本地化软件,有自动翻译的功能.具体介绍就不多说了,大家可以百科,下面教程开始 1.      软件的安装与破解,由于该软

一个特别适合新手练习的Android小项目——每日一妹纸

介绍 每天更新一张精选妹纸图片,第一版目前已完成,本项目会持续更新,遇到任何问题欢迎与我联系^_^ 为什么说这是一个特别适合新手练习的小项目? 服务器API接口功能丰富且无访问次数限制 包含了常见的网络通信,数据缓存等功能 使用了流行的Realm,Retrofit,Glide,Butterknife等开源项目,方便新手学习他们的使用 遵循Material Design规则 示例 项目当然是开源的啦,源码请戳下面的链接 https://github.com/SparkYuan/Meizi ----

适合新手的web开发环境

学习web开发,环境搭建是必不可少的一个环节.你可以使用wamp一键安装包,或者使用sae.bae.gae这种PaaS平台来部署,或者安装*nix系统在本地部署. 对于一个希望体验LAMP式建站的新手而言,一个简单可行的方案是:虚拟机中安装Linux,在Windows下写代码,通过ftp部署代码. 首先,我们假定你平时用的操作系统是windows.不然的话,Linux.Mac OSX上都有命令行和终端可以用,本机部署就行. 然后,安装虚拟机VirtualBox,并在VritualBox中安装一个

C# 集合详解 (适合新手)

System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义泛型集合的接口和类,泛型集合允许用户创建强类型集合,它能提供比非泛型强类型集合更好的类型安全性和性能.System.Collections.Specialized 命名空间包含专用的和强类型的集合,例如,链接的列表词典.位向量以及只包含字符串的集合. 在System.Collections命名空间中

Linux下Gvim 的基本操作-适合新手看

Linux下Gvim 的基本操作 vi 有三种方式 编辑方式 插入方式 命令方式在命令方式下,所有命令以“:”开始,所键入的字符系统均作为命令处理在命令方式下,按下i就会进入插入模式,用户输入的可视字符都添加到文件中,按下Esc键,就回到命令状态 基本命令光标命令:k,j,h,l-----上下左右移动光标nG-------跳转命令.n为行数,该命令立即跳转到指定的行Ctrl+G -----报告光标所在位置的行数和列数w,b----- 使光标向前或者向后跳过一个单词 编辑命令:i,a,r----在