1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-11 08:12:26 +08:00

feat: add HasSubTree func for BSTree

This commit is contained in:
dudaodong
2022-04-27 10:43:01 +08:00
parent e98c46c903
commit 0d48778886
3 changed files with 30 additions and 8 deletions

View File

@@ -78,25 +78,25 @@ func (t *BSTree[T]) Depth() int {
}
// IsSubTree checks if the tree `t`` has `subTree` or not
func (t *BSTree[T]) IsSubTree(subTree *BSTree[T]) bool {
return isSubTree(t.root, subTree.root, t.comparator)
func (t *BSTree[T]) HasSubTree(subTree *BSTree[T]) bool {
return hasSubTree(t.root, subTree.root, t.comparator)
}
func isSubTree[T any](superTreeRoot, subTreeRoot *datastructure.TreeNode[T],
func hasSubTree[T any](superTreeRoot, subTreeRoot *datastructure.TreeNode[T],
comparator lancetconstraints.Comparator) bool {
res := false
if superTreeRoot != nil && subTreeRoot != nil {
if comparator.Compare(superTreeRoot.Value, subTreeRoot.Value) == 0 {
res = hasSubTree(superTreeRoot, subTreeRoot, comparator)
res = isSubTree(superTreeRoot, subTreeRoot, comparator)
}
if !res {
res = isSubTree(superTreeRoot.Left, subTreeRoot, comparator)
res = hasSubTree(superTreeRoot.Left, subTreeRoot, comparator)
}
if !res {
res = isSubTree(superTreeRoot.Right, subTreeRoot, comparator)
res = hasSubTree(superTreeRoot.Right, subTreeRoot, comparator)
}
}
return res