之前做过求一棵树的深度的题目,拿到这一题的思路就是分别对两颗树进行求深度,如果左右两颗子树的高度差=1或者=0,即是平衡二叉树。
但是忽略了每一个子树都得是二叉树的要求,这种方式考虑不全,参考了其它代码,在求每个左右节点的左右子树高度的时候,都进行判断,如果任一棵子树高度差不等于0或者1,即不为平衡二叉树,见代码:
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func isBalanced(root *TreeNode) bool {
if root == nil{
return true
}
temp := true
getHeight(root, &temp)
return temp
}
func getHeight(root *TreeNode, temp *bool)int{
if root == nil{
return 0
}
left := getHeight(root.Left, temp)
right := getHeight(root.Right, temp)
if abs(left, right) > 1{
*temp = false
}
return 1+max(left, right)
}
func abs(a, b int)int{
if a-b>0{
return a-b
}
return b-a
}
func max(a, b int)int{
if a > b{
return a
}
return b
}
|