使用二叉树获取字符串的最大子串

通过构建二叉树,将字符串字符按顺序插入,以最后一个字符为根,形成的二叉树中,所有右子树根节点的组合构成最大子串。例如,字符串'ETCFGABD'构建的二叉树,最大子串为'TGD'。以下是相关代码实现。
摘要由CSDN通过智能技术生成

**

使用二叉树获取字符串的最大子串

**

在获取一个随机字符串的最大子串问题上,我想到可以用二叉树来解决这个问题,因为二叉树在插入元素时按左小右大来,如果将字符串每个字符插入二叉树,那么所有右子树的根节点组成的字符串就是最大的子串。以下使用代码验证这个思路。如果有错误的地方请多多指教。谢谢。

首先,比如有个字符串是 ETCFGABD ,那么重后往前插入二叉树,以字符串最后一个字符为树根。这样就得到一个二叉树如下图所示:

在这里插入图片描述
这个二叉树的所有右子树的根节点组成的子串是 TGD 就是 最大子串。

以下是代码实现:

//
//  main.cpp
//  maxSubStr
//
//  Created by Forest on 20/6/17.
//  Copyright © 2020年 lin. All rights reserved.
//

#include <iostream>
#include <stdio.h>
#include <iomanip>
#include <string>
#include <vector>

using namespace std;

template<typename T>

class binaryTree {
    
public:
    
    struct Node {
        T data;
        //左子树指针
        Node* left;
        //右子树指针
        Node* right;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值