/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution{publicdoubleminimalExecTime(TreeNoderoot){returndfs(root)[1];}privatedouble[]dfs(TreeNoderoot){if(root==null){returnnewdouble[]{0,0};}double[]left=dfs(root.left);double[]right=dfs(root.right);doubles=left[0]+right[0]+root.val;doublet=Math.max(Math.max(left[1],right[1]),(left[0]+right[0])/2)+root.val;returnnewdouble[]{s,t};}}
/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */classSolution{public:doubleminimalExecTime(TreeNode*root){function<pair<double,double>(TreeNode*)>dfs=[&](TreeNode*root)->pair<double,double>{if(!root){return{0,0};}auto[s1,t1]=dfs(root->left);auto[s2,t2]=dfs(root->right);doubles=s1+s2+root->val;doublet=max({t1,t2,(s1+s2)/2})+root->val;return{s,t};};auto[_,t]=dfs(root);returnt;}};
1 2 3 4 5 6 7 8 91011121314151617181920212223
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funcminimalExecTime(root*TreeNode)float64{vardfsfunc(*TreeNode)(float64,float64)dfs=func(root*TreeNode)(float64,float64){ifroot==nil{return0,0}s1,t1:=dfs(root.Left)s2,t2:=dfs(root.Right)s:=s1+s2+float64(root.Val)t:=math.Max(math.Max(t1,t2),(s1+s2)/2)+float64(root.Val)returns,t}_,t:=dfs(root)returnt}