在一个问题中,我得到了两棵二叉树,为了检查一棵二叉树是否是另一棵二叉树的子树,代码片段基本上对麻烦树进行了预排序遍历,并生成了相应的字符串。然后,它使用indexOf检查一个树字符串是否在另一个树中,以证明一棵树是另一棵树的子树。现在的问题是,由于字符串生成和比较的开销很大,除了执行字符串比较之外,我还应该如何将其更改为n元树。
我不确定如何处理这个问题,但我有一个想法,我认为我可以使用某种HashMap将树节点存储为键,将其子节点存储为值。然后可能会比较相似键上的两个树值,以检查树是否是子树?
但是如何做到这一点呢?我糊涂了!需要一点帮助。
下面是函数的代码片段:
//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,我知道子数组将在一个数组中,并且我在数组上进行了预排序,而不是左和右。但是,我怎样才能避免字符串连接,因为它很昂贵?
发布于 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/
我不确定这是不是一个好的方法。只是想分享一下。
https://stackoverflow.com/questions/43581153
复制