public static int deepestLeavesSum_depthVal(TreeNode p_root)
        {
            depthVal topdv = new depthVal(0, p_root.val);

            topdv.add(diver(p_root.left, topdv));
            topdv.add(diver(p_root.right, topdv));

            return(topdv.val);
        }
 public void add(depthVal p_dv)
 {
     if (p_dv is null)
     {
         return;
     }
     if (p_dv.depth == this.depth)
     {
         this.val += p_dv.val;
     }
     else if (this.depth < p_dv.depth)
     {
         this.val   = p_dv.val;
         this.depth = p_dv.depth;
     }
 }
        public static depthVal diver(TreeNode p_node, depthVal p_parent)
        {
            if (p_node is null)
            {
                return(p_parent);
            }
            Console.WriteLine("depth:" + (p_parent.depth + 1) + "|val:" + p_node.val);

            depthVal thisNode = new depthVal(p_parent.depth + 1, p_node.val);

            if (!(p_node.left is null))
            {
                thisNode.add(diver(p_node.left, thisNode));
            }
            if (!(p_node.right is null))
            {
                thisNode.add(diver(p_node.right, thisNode));
            }

            return(thisNode);
        }