func (h *TagHier) IsSubnode(id1, id2 int) (bool, error) {
	if _, ok := h.idToItem[id1]; !ok {
		return false, errors.Errorf("can't check if %d is a subnode of %d: no item with id %d", id1, id2, id1)
	}

	if _, ok := h.idToItem[id2]; !ok {
		return false, errors.Errorf("can't check if %d is a subnode of %d: no item with id %d", id1, id2, id2)
	}

	for {
		parentID := h.idToItem[id1].parentID
		if parentID == id2 {
			return true, nil
		} else if parentID == 0 {
			return false, nil
		}

		id1 = parentID
	}
}
// Returns true if id1 is a subnode of id2.
Returns true if id1 is a subnode of id2.
// Returns true if id1 is a subnode of id2 .
func (h *TagHier) IsSubnode(id1, id2 int) (bool, error) {
	if _, ok := h.idToItem[id1]; !ok {
		return false, errors.Errorf("can't check if %d is a subnode of %d: no item with id %d", id1, id2, id1)
	}
	if _, ok := h.idToItem[id2]; !ok {
		return false, errors.Errorf("can't check if %d is a subnode of %d: no item with id %d", id1, id2, id2)
	}
	for {
		parentID := h.idToItem[id1].parentID
		if parentID == id2 {
			return true, nil
		} else if parentID == 0 {
			return false, nil
		}
		id1 = parentID
	}
}
func ( h * TagHier ) IsSubnode ( id1 , id2 int ) ( bool , error ) { if _ , ok := h . idToItem [ id1 ] ; ! ok { return false , errors . Errorf ( " " , id1 , id2 , id1 ) } if _ , ok := h . idToItem [ id2 ] ; ! ok { return false , errors . Errorf ( " " , id1 , id2 , id2 ) } for { parentID := h . idToItem [ id1 ] . parentID if parentID == id2 { return true , nil } else if parentID == 0 { return false , nil } id1 = parentID } }
Returns true if id1 is a subnode of id2.
Returns true if id1 is a subnode of id2 .