code: def properties(self):
          
          properties = _get_tree_properties(self)
          properties.update({
              'is_bst': _is_bst(self),
              'is_balanced': _is_balanced(self) >= 0
          })
          return properties
docs: Return various properties of the binary tree.
  
          :return: Binary tree properties.
          :rtype: dict
  
          **Example**:
  
          .. doctest::
  
              >>> from binarytree import Node
              >>>
              >>> root = Node(1)
              >>> root.left = Node(2)
              >>> root.right = Node(3)
              >>> root.left.left = Node(4)
              >>> root.left.right = Node(5)
              >>> props = root.properties
              >>>
              >>> props['height']         # equivalent to root.height
              2
              >>> props['size']           # equivalent to root.size
              5
              >>> props['max_leaf_depth'] # equivalent to root.max_leaf_depth
              2
              >>> props['min_leaf_depth'] # equivalent to root.min_leaf_depth
              1
              >>> props['max_node_value'] # equivalent to root.max_node_value
              5
              >>> props['min_node_value'] # equivalent to root.min_node_value
              1
              >>> props['leaf_count']     # equivalent to root.leaf_count
              3
              >>> props['is_balanced']    # equivalent to root.is_balanced
              True
              >>> props['is_bst']         # equivalent to root.is_bst
              False
              >>> props['is_complete']    # equivalent to root.is_complete
              True
              >>> props['is_max_heap']    # equivalent to root.is_max_heap
              False
              >>> props['is_min_heap']    # equivalent to root.is_min_heap
              True
              >>> props['is_perfect']     # equivalent to root.is_perfect
              False
              >>> props['is_strict']      # equivalent to root.is_strict
              True