题目
26年5月23日(首刷看解)
func isBalanced(root *TreeNode) bool {
result:=getheight(root)
if result==-1{
return false
}
return true
}
func getheight(root *TreeNode) int{
if root==nil{
return 0
}
l:=getheight(root.Left)
r:=getheight(root.Right)
if l==-1||r==-1{
return -1
}
if abs(l-r)>1{
return -1
}
return max(l+r)+1
}
func abs(a int) int{
if(a>0){
return a
}else{
return -a
}
}
思路
递归三部曲
1.确定投进去的参数和想要的结果。(大老板给资金,指定要求结果)
这里getheight 是给一个根节点,要求得到这个根节点的高度
2.确定终止条件(最蠢的员工来说:老板如果根节点为0怎么办)
3.确定单次的逻辑(外包交给最聪明的员工)
复杂任务直接调用递归
比如这里要确定一个节点的高度,就是算左右子树大的那个高度,再加根节点本身,最后返回
那么这里算左右子树的高度,外包交给聪明员工
l:=getheight(root.Left)
r:=getheight(root.Right)
还有一些判断逻辑,就要自己想。