depthEach(upToDownCallBack = () => false, downToUpCallBack = () => false) {
    const dfs = (node, deep) => {
      if (!TreeNode.isType(node)) {
        return
      }
      for (let i = 0; i < node.childNodes.length; i++) {
        const _node = node.childNodes[i]
        if (upToDownCallBack(_node, node, deep)) return
        dfs(_node, deep + 1)
        if (downToUpCallBack(_node, node, deep)) return
      }
    }
    upToDownCallBack(this, this.parent, 0)
    dfs(this, 1)
    downToUpCallBack(this, this.parent, 0)
  }
from current node start, down each
@param {Function} callback( node:TreeNode, parentNode:TreeNode, deep: number) if returns true then stop each, else not stop