C++ 二叉树Tree类 完整实现

C++写的二叉查找树Tree操作函数 看到递归,又想到数据结构,于是就有了写个应用递归的数据结构,自然就想到了数结构,这里就以最典型的二叉查找树为例,看看递归在其中的应用: 阅读详情

 这是C++ 二叉树Tree类的实现。花了我整整一天工夫。包含了一个子类和一个树类。通过递归和链表实现的二叉树。相当标准,值得借鉴。

 

//8.(*2) 实现Tnode 二叉树类
#include <iostream>
#include <string>
class Tnode{
 friend class Tree;
 Tnode(const std::string& w):
     word(w),count(1),left(0),right(0) {}
    ~Tnode()
    {
     if(left)
      left->right=right;      
        if(right)
            right->left=left;
    }
    std::string word;
    int count;
    Tnode *left,*right;
};
class Tree{
public:
    Tree(const std::string& word){root=new Tnode(word);}
    ~Tree()
    {
        for(Tnode* p=root;p;p=p->left)
            p->~Tnode();
        root->~Tnode();
        for(Tnode* p=root;p;p=p->right)
            p->~Tnode();
        delete root;
    }
    void enter_word(const std::string&);
    void write(std::ostream& os,bool indent=true,int spaces=2);
    void write(std::ostream& os,Tnode* node,
            bool indent=true,int spaces=2);
private:
    Tnode *root;
};
void Tree::enter_word(const std::string& word)
{
 Tnode* node=root;
 while(true){
  int order=word.compare(node->word);
  if(order==0){
   ++node->count;
   break;
  }else{
   Tnode*& next=order<0?node->left:node->right;
   if(next==0){
    next=new Tnode(word);
    break;
   }else
       node=next;
  }
 }
}
void Tree::write(std::ostream& os,bool indent,int spaces)
{
 write(os,root->left,indent,spaces+2);
 if(indent)
     for(int k=0;k!=spaces;++k)
         os<<' ';
    os<<root->word
      <<"("<<root->count<<")\n";
    write(os,root->right,indent,spaces+2);
}
void Tree::write(std::ostream& os,Tnode* node,bool indent,int spaces)
{
 if(node){
     write(os,node->left,indent,spaces+2);
     if(indent)
         for(int k=0;k!=spaces;++k)
             os<<' ';
        os<<node->word
          <<"("<<node->count<<")\n";
        write(os,node->right,indent,spaces+2);
 }
}
int main()
{
 Tree t("C");
 t.enter_word("C++");
 t.enter_word("Ada");
 t.enter_word("Java");
 t.enter_word("Java++");
 t.enter_word("Pascal");
 t.enter_word("Delphi");
 t.write(std::cout);
 return 0;
}

 

C++指针实现二叉树 以洛谷[P1305] 新二叉树为例二叉树是什么东西,先序遍历是什么,这些网上都有,这里就不说了。数组实现也好做,但是复杂一点的用数组怕是要凉,用set啊map呀等STL容器怕是要慢。所以还是指针实现好。但是玩儿指针需要一定的语法基础,看周围大佬居然无一人会用指针建树。先聊一聊指针。若已掌握,请略过此段。以int型为例。若建立指向某个变量的指针,操作如下:int a = 0; int* p = &a... 阅读详情

相关推荐

利用C++模板生成随机二叉树

构造一个生成随机二叉树的类,二叉树的结点 数、结点所存放的数据类型等都可以是任意的:TreeElement.h描述的是二叉树的结点信息,Tree.h描述二叉树本身,代码如下:TreeElement.h:#ifndef TREEELEMENT_H#define TREEELEMENT_Htemplate class Type>class TreeElement...{private:    

ccnu425的专栏 3883

C++ 树形结构

参考自:http://blog.youkuaiyun.com/stephenxu111/article/details/2446382 修改了此篇文章中 代码显示的一点小问题。///Tree.h 文件 #pragma once #include <list> #include <algorithm> using namespace std;struct TreeNode; //定义一个结构体原形 clas

x_xx_xxx_xxxx的博客 5608

数据科学常见模型总结(二)-倾向性得分匹配模型

PSM的核心思想是从未受干预的用户群体中,找到和干预对象一模一样的用户,这样就可以把因果效应归因到干预上。

wudelong0112的专栏 4889

C++数据结构--树

C++数据结构--树

m0_73443478的博客 1775

FPGA驱动OV5640:从SCCB协议到图像数据采集的实战解析

本文详细解析了使用FPGA驱动OV5640摄像头模组的完整流程,从SCCB协议通信、寄存器配置到图像数据采集。重点阐述了SCCB(与I2C类似)协议的实现细节、关键的上电复位时序,以及如何通过状态机解析视频流时序并捕获图像数据,为嵌入式视觉开发提供了实战指南。

weixin_29191761的博客 187

看我如何用kali实时截获隔壁"小姐姐"的上网隐私(结尾有彩蛋)

看我如何用kali实时截获隔壁&amp;amp;amp;quot;小姐姐&amp;amp;amp;quot;的手机图片等信息(结尾有彩蛋哦) 首先圈下重点:《刑法》第二百八十五条 【非法侵入计算机信息系统罪;非法获取计算机信息系统数据、非法控制计算机信息系统罪】违反国家规定,侵入国家事务、国防建设、尖端科学技术领域的计算机信息系统的,处三年以下有期徒刑或者拘役。违反国家规定,侵入前款规定以外的计算机信息系统或者采用其他技术手段,获取该计算机信息系统中存储、处理或...

SoulCat 2万+

【C/C++数据结构】树与二叉树的基础与概念详解

在你学习树和二叉树时,你可能非常需要这篇知识点速查配套笔记! 在学习二叉树时,通常不会直接学习二叉树的增删查改操作,而是更加关注树的基础概念与过程原理。 关于树的叶节点、双亲节点、孩子节点、树的高度与深度、节点的子孙、分支节点(终端节点)、树的度、节点的层次、堂兄弟节点、节点的祖先、子孙、森林,本文都一一介绍。在学习二叉树时,本文还介绍满二叉树、完全二叉树的概念、联系与区别,最后还会介绍二叉树的相关性质以及存储结构的。配套练习题让你的知识更加巩固!

weixin_43654363的博客 1747

【Lane】 Ultra-Fast-Lane-Detection 复现

引言 车道线检测源码复现以及训练自己的数据集 1 环境搭建 conda create -n lane python=3.7 conda activate lane # 激活环境 conda install pytorch torchvision cudatoolkit=10.1 -c pytorch pip install -r requirements.txt 2 下载项目源码 若在服务器上可以用指令下载,否则直接在网址中下载 git clone https://github.com/cfzd/U

qq_44703886的博客 2万+

C++ 二叉树常见用法

二叉树的创建: 上篇文章遍历的时候二叉树的创建是这样的: TreeNode* T1 = new TreeNode(8); TreeNode* T2 = new TreeNode(8); TreeNode* T3 = new TreeNode(7); TreeNode* T4 = new TreeNode(9); TreeNode* T5 = new TreeNode(2); TreeNode* T6 = new TreeNode(4); TreeNode* T7 = new TreeNode(

qq_37082966的博客 2238

DSP28335学习笔记——McBSP配置为SPI

由于28335硬件外设上只有一个SPI接口,所以当SPI接口不够用时,可以将McBSP配置为SPI接口。 参考28335的数据手册,当DSP为主机时,配置McBSP为SPI所用到的接线如下图所示。 另外总结一些调试过程中的经验。 1.传输数据位数的确定 由RCR1寄存器中的RWDLEN1和XCR1寄存器中的XWDLEN1决定。分别对应着接受和发送的位数,在配置成SPI模式的时候,这

捕虫少年 1万+

C#WPF常用的9种布局方式详解

本文介绍WPF中常用的九种布局,Grid、StackPanel、WrapPanel、DockPanel、UniformGrid、Canvas、ScrollViewer、ViewBox、Border。

qq_30725967的博客 1万+

二叉树完整实现C++

总结网上一位大牛写的代码,看看人家,就写一个二叉树,就把C++继承多态的作用发挥出来,看咱只能简单定义一个class, 差距大啊~自己还是小白~ BinaryTree.h#ifndef BINARY_TREE #define BINARY_TREE #include #include #include #include using namespace std;

小熊不去实验室 3664

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

用C++实现二叉树

C++ 基础内容, 不值一提 Author:Jacky Wu       2006-5-15 引用该文章,必须注明其出处              http://blog.youkuaiyun.com/imwkj    

Jacky Wu 的专栏 8135

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 572

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

二叉树C++实现

最近整理原来的一些代码,脑子有点不好使,还是记下来吧。 //binary_tree.h,遍历包含了递归和非递归两种,层次遍历 #ifndef _BINARY_TREE_H_ #define _BINARY_TREE_H_ template struct BiNode { T data; BiNode* lchild, *rchild; }; template class BiT

leo_lou 1万+

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

二叉树(C++类模板实现)

文章目录1. 二叉树的定义2.二叉树的性质3.二叉树的存储结构4. 代码 1. 二叉树的定义 后续更新 2.二叉树的性质 后续更新 3.二叉树的存储结构 顺序存储结构。顺序存储结构使用一组地址连续的存储单元来存储数据元素,为了能够在存储结构中反映出结点之间的逻辑关系,必须将二叉树中的结点依照一定的规律安排在这组单元中。 链式存储结构设计不同的结点结构可构成不同形式的链式存储结构。由二叉树的定义得知,二叉树的结点由一个数据元素和分别指向其左、 右子树的两个分支构成,则表示二叉树的链表 中的结点至少

zws的博客 4632

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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

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

C++类封装线索二叉树

线索二叉树本质就是基于普通二叉树的优化,它通过利用节点的空指针域(左空指针,右空指针)存储前驱/后继节点的地址(称为“线索”),能够无需依赖递归或栈/队列辅助进行快速遍历二叉树(时间复杂度仍为O(n),但空间复杂度从O(n)降至O(1)),也可以在遍历中通过线索快速查找到前驱/后继节点,中序线索二叉树是最常用的,因为它的"左-根-右"可以让二叉排序树(又称二叉搜索树)的遍历结果天然有序,那本篇即就中序遍历线索二叉树来详细讲解,代码以分文件的形式编写,内含大量注释.

kamenrider___的博客 925

二叉树的三种遍历【树的遍历】(C++实现)Binary Tree Traversal

前序遍历:根节点最先访问,适合复制树或生成前缀表达式;中序遍历:根节点在中间访问,适合获取有序数据(如二叉搜索树);后序遍历:根节点最后访问,适合删除树或生成后缀表达式。

大葱的田地🌱 1772

C++实现二叉树链表

C++实现二叉树链表Node.h#ifndef NODE_H #define NODE_H #include <iostream>using namespace std;class Node { public: Node(); ~Node(); Node *SearchNode(int nodeIndex); void DeleteNode(); void P

Vimer.Bai的博客 2473

LinuxC/C++编程基础(5) 排序二叉树的实现

一.binary_search_tree.h头文件的声明,如下: #ifndef BINARY_SEARCH_TREE_H #define BINARY_SEARCH_TREE_H typedef struct TreeNode* link; struct TreeNode{     unsigned char item;     link left;     link ri

linyanwen99的专栏 829

C++实现二叉树数组

C++实现二叉树数组Tree.h#ifndef TREE_H #define TREE_H#include <iostream> using namespace std;class Tree { public: Tree(int size, int *pRoot); //创建树 ~Tree();

Vimer.Bai的博客 1388

用数组实现的二叉树(C++实现)

本文方法可用于构建普通二叉树/完全二叉树/满二叉树

weixin_75274374的博客 2641

平衡二叉树(AVL Tree)的C++实现

1:先说一下AVL Tree和普通的二叉排序树的区别: 对于一般的二叉搜索树(Binary Search Tree),其期望高度(即为一棵平衡树时)为log2n,其各操作的时间复杂度(O(log2n))同时也由此而决定。但是,在某些极端的情况下(如在插入的序列是有序的时),二叉搜索树将退化成近似链或链,此时,其操作的时间复杂度将退化成线性的,即O(n)。我们可以通过随机化建立二叉搜索树来尽量的避免...

A_luka的博客 1280

二叉树简介及C++实现

二叉树是每个结点最多有两个子树的树结构,即结点的度最大为2。通常子树被称作”左子树”和”右子树”。二叉树是一个连通的无环图。 二叉树是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:(1)、空二叉树;(2)、只有一个根结点的二叉树;(3)、只有左子树;(4)、只有右子树;(5)、完全二叉树。 二叉树类型: (1)、满二叉树:深度(层数)为k,且有2^k-1个结点的二叉树。这种树...

网络资源是无限的 2万+

KD-Tree 算法的 C++ 实现

KD-Tree 算法的 C++ 实现阅读本文前,建议查阅相关资料,了解 KNN 算法与 KD 树。基础知识如图所示,假设一个点 a 目前的最近邻点为 b,如果存在相对于 b 离 a 更近的点,那么这个点一定在以 a 为圆心,ab 为半径的圆内。 现右侧的区域是未知的,如果 a 到分界线的距离 l 大于目前的最近距离 L(圆半径),则没有必要在右侧的未知区域继续寻找最近邻点(如图一),反之,则要继续

Doge的博客 1621
上一篇: C++程序设计语言 特别版 第10章 Date类 完整实现
下一篇: Intset实现:真正理解并掌握链表
laochen46
博客等级 码龄18年 13粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值