/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(int x) { val = x; } * } */classSolution{publicintcloseLampInTree(TreeNoderoot){returndfs(root)[0];}privateint[]dfs(TreeNoderoot){int[]ans=newint[4];if(root==null){returnans;}int[]left=dfs(root.left);int[]right=dfs(root.right);intl1=left[0],l2=left[1],l3=left[2],l4=left[3];intr1=right[0],r2=right[1],r3=right[2],r4=right[3];if(root.val!=0){ans[0]=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3);ans[1]=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2);ans[2]=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2);ans[3]=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1);}else{ans[0]=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2);ans[1]=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1);ans[2]=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3);ans[3]=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2);}returnans;}privateintmin(int...nums){intans=1<<30;for(intnum:nums){ans=Math.min(ans,num);}returnans;}}
/** * Definition for a binary tree node. * type TreeNode struct { * Val int * Left *TreeNode * Right *TreeNode * } */funccloseLampInTree(root*TreeNode)(ansint){constinf=1<<30vardfsfunc(*TreeNode)(int,int,int,int)dfs=func(root*TreeNode)(int,int,int,int){ifroot==nil{return0,0,0,0}l1,l2,l3,l4:=dfs(root.Left)r1,r2,r3,r4:=dfs(root.Right)t1,t2,t3,t4:=inf,inf,inf,infifroot.Val==1{t1=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3)t2=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2)t3=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2)t4=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1)}else{t1=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2)t2=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1)t3=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3)t4=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2)}returnt1,t2,t3,t4}ans,_,_,_=dfs(root)return}
/* public class TreeNode {* public var val: Int* public var left: TreeNode?* public var right: TreeNode?* public init(_ val: Int) {* self.val = val* self.left = nil* self.right = nil* }* }*/classSolution{funccloseLampInTree(_root:TreeNode?)->Int{returndfs(root)[0]}privatefuncdfs(_root:TreeNode?)->[Int]{varans=[Int](repeating:0,count:4)guardletroot=rootelse{returnans}letleft=dfs(root.left)letright=dfs(root.right)letl1=left[0],l2=left[1],l3=left[2],l4=left[3]letr1=right[0],r2=right[1],r3=right[2],r4=right[3]ifroot.val!=0{ans[0]=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3)ans[1]=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2)ans[2]=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2)ans[3]=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1)}else{ans[0]=min(l1+r1,l2+r2+2,l3+r3+2,l4+r4+2)ans[1]=min(l1+r1+1,l2+r2+1,l3+r3+3,l4+r4+1)ans[2]=min(l1+r1+1,l2+r2+1,l3+r3+1,l4+r4+3)ans[3]=min(l1+r1+2,l2+r2,l3+r3+2,l4+r4+2)}returnans}privatefuncmin(_nums:Int...)->Int{returnnums.min()??Int.max}}