Loading [MathJax]/jax/input/TeX/config.js
社区首页 >问答首页 >给出两个N元树,有什么能比预先排序的字符串比较来显示一棵树是另一棵树的子树更好、更有效的呢?

给出两个N元树,有什么能比预先排序的字符串比较来显示一棵树是另一棵树的子树更好、更有效的呢?
EN

Stack Overflow用户
提问于 2017-04-24 06:28:12
回答 1查看 587关注 0票数 1

在一个问题中,我得到了两棵二叉树,为了检查一棵二叉树是否是另一棵二叉树的子树,代码片段基本上对麻烦树进行了预排序遍历,并生成了相应的字符串。然后,它使用indexOf检查一个树字符串是否在另一个树中,以证明一棵树是另一棵树的子树。现在的问题是,由于字符串生成和比较的开销很大,除了执行字符串比较之外,我还应该如何将其更改为n元树。

我不确定如何处理这个问题,但我有一个想法,我认为我可以使用某种HashMap将树节点存储为键,将其子节点存储为值。然后可能会比较相似键上的两个树值,以检查树是否是子树?

但是如何做到这一点呢?我糊涂了!需要一点帮助。

下面是函数的代码片段:

代码语言:javascript
代码运行次数:0
复制
//make the Node
interface Node {
  value: string ;
  left?: Node ;
  right?: Node ;
}
function checkSubtree(T1: Node , T2: Node ): boolean {
  return PreOrderTraversal(T1).indexOf(PreOrderTraversal(T2)) > - 1 ;
}
function stringFromPreOrder(tree: Node ): string {
  if (!tree) {
    return "" ;
}
  return tree.value + PreOrderTraversal(tree.left) + PreOrderTraversal(tree.right);

因此,基本上考虑到这一点,我如何才能让它在nary树上更好地工作,而不是连接字符串并比较它们呢?此外,对于nary tree,我知道子数组将在一个数组中,并且我在数组上进行了预排序,而不是左和右。但是,我怎样才能避免字符串连接,因为它很昂贵?

EN

回答 1

Stack Overflow用户

发布于 2018-04-11 20:41:36

参考:https://leetcode.com/articles/introduction-to-n-ary-trees/

您可以将n-ary转换为二叉树,反之亦然。

我们已经有了一个寻找二叉树的子树的算法。参考:https://www.geeksforgeeks.org/check-if-a-binary-tree-is-subtree-of-another-binary-tree/

我不确定这是不是一个好的方法。只是想分享一下。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43581153

复制
相关文章
​LeetCode刷题实战572:另一棵树的子树
算法的重要性,我就不多说了吧,想去大厂,就必须要经过基础知识和业务逻辑面试+算法面试。所以,为了提高大家的算法能力,这个公众号后续每天带大家做一道算法题,题目就从LeetCode上面选 !
程序员小猿
2022/04/12
2050
​LeetCode刷题实战572:另一棵树的子树
画一棵树
从一个树枝开始,分叉向两端(或者更多端),然后继续从新的树枝进行分叉,......
一只大鸽子
2022/12/06
3580
画一棵树
判断一棵树是否是搜索二叉树
搜索二叉树它是一种节点值之间具有一定数量级次序的二叉树,对于树中每个节点: 若其左子树存在,则其左子树中每个节点的值都不大于该节点值; 若其右子树存在,则其右子树中每个节点的值都不小于该节点值。 思想: 实际上只要树的中序遍历结果是升序的,那么其就是搜索二叉树 代码实现 package com.algorithm.practice.tree; import java.util.Stack; public class SearchTreeJudge { public static class
名字是乱打的
2022/05/13
1690
ztree实现一棵树
前面陆陆续续的写过一些ztree的文章,但调用的是后端的接口,demo拿过去没有办法可以直接查看前端的界面,这就造成了一部分人对此理解的困扰。
王小婷
2019/06/20
7090
判断一棵树是否为二叉排序树
由于二叉排序树的中序遍历时得到的一定是个一个升序序列,我们可以根据这一性质,利用中序遍历进行判定。
AI那点小事
2020/04/18
2K0
好大一棵树,新春的祝福(一):n级分类的数据结构
     这个树的结构几年前在csdn里面也发过了一次,现在看看,主体结构居然没有什么变化,用了这么长的时间,自我感觉还是很好用的。而且在这个基础之上把其他的功能也都给联系起来了,比如“通用权限”、配置信息等。对,权限是和这个有很大关系的,不过这种关系并不是大家想的“紧耦合”,具体是什么关系呢,待我慢慢讲来,o(∩_∩)o...。      由于我喜欢使用数据库,所以呢,这里就以数据库为主来说明。 1、基本的n级分类的结构。      树,本身就是一个n级分类,所以呢还是先从这个说起。n级分类,一般会想
用户1174620
2018/02/26
6740
好大一棵树,新春的祝福(一):n级分类的数据结构
数据结构与算法——最小生成树
在之前的文章中已经详细介绍了图的一些基础操作。而在实际生活中的许多问题都是通过转化为图的这类数据结构来求解的,这就涉及到了许多图的算法研究。
五分钟学算法
2019/05/06
1.6K0
数据结构与算法——最小生成树
如何优雅地画一棵树
不知道你有没有找过一些工具来画数据结构的图,我反正是找了不少。windows下的visio是挺强大的,不过在linux没法使用,当然你非要使用也可以安装wine;亿图也不错,支持画数据结构图,不过是收费的。然而前面这些都不是重点,重点是他们画图都是拖拽类型的,手残党实在把持不住。最后终于发现了一款程序员画图神器-graphviz。《什么是二叉查找树》文中的树图就是用该工具画的.
编程珠玑
2019/07/12
1.6K0
如何优雅地画一棵树
【LeetCode】Symmetric Tree 推断一棵树是否是镜像的「建议收藏」
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/115650.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/10
1400
GBDT(MART) 迭代决策树入门及源码解析
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答案。它在被提出之初就和SVM一起被认为是泛化能力(generalization)较强的算法。近些年更因为被用于搜索排序的机器学习模型而引起大家关注。 GBDT主要由三个概念组成:Regression Decistion Tree(即DT),Gradient Boost
机器学习AI算法工程
2018/03/12
1.5K0
GBDT(MART) 迭代决策树入门及源码解析
种一棵树最好的时间是10年前,其次是现在!
2019 年下半年,萌生了写公众号的想法,于是乎,申请了一个订阅号。近乎于晾在一边,持续了半年时间,春节的时候才想着要认真对待这件事情。
歪马
2020/04/16
5200
种一棵树最好的时间是10年前,其次是现在!
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:
1480
2019/10/15
1.1K0
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:
统计学家
2019/09/03
1.6K0
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行输的分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:
Python数据科学
2019/10/10
7990
决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
推荐收藏 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
决策树是一个有监督分类模型,本质是选择一个最大信息增益的特征值进行分割,直到达到结束条件或叶子节点纯度达到阈值。下图是决策树的一个示例图:
Sam Gor
2019/10/12
7130
推荐收藏 | 决策树、随机森林、bagging、boosting、Adaboost、GBDT、XGBoost总结
从一道动态规划题带你领略『卡特兰数』是如何秒杀算法题的
思路:从 1 开始到 n ,每次以这个数为根,左子树存放比它小的数,右子树存放比它大的数。每个根不重复,因此每个树也必定不重复。
帅地
2019/12/19
9540
从一道动态规划题带你领略『卡特兰数』是如何秒杀算法题的
建模 | 如何快速砍倒一棵树
用斧子砍树时,通常做法是在树上砍一个豁口,这样会省力一些。下面结合中学物理中的运动学知识来分析这样做的道理。
fem178
2020/04/21
8040
建模 | 如何快速砍倒一棵树
一行代码一棵树
Python 字符串这块可以玩出很多有意思的功能,今天我以一个精简的字符串打印为例来展示。
double
2020/07/01
5610
Trie树(字典树) [模板]------------Five-菜鸟级
  又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。
Fivecc
2022/11/21
6800
Trie树(字典树) [模板]------------Five-菜鸟级
二叉树(入门级)
 5.3 二叉树的前序遍历 144. 二叉树的前序遍历 - 力扣(LeetCode)
二肥是只大懒蓝猫
2023/03/28
3710
二叉树(入门级)

相似问题

一棵树是另一棵树的子树吗?

13

如何检查一棵树是否是另一棵树的子树?

40

密码有什么问题..。另一棵树的子树

110

jsTree将子树从一棵树移动到另一棵树。

25

我正在尝试找出一棵树是否是另一棵树的子树,并且遇到了ArrayList比较问题

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档