2021-04-13:判断二叉树是否是平衡二叉树?
2021-04-13:判断二叉树是否是平衡二叉树?
福大大 答案2021-04-13:
1.左子节点平衡。
2.右子节点平衡。
3.左右子节点高度差不超过1。
采用递归即可。
代码用golang编写。代码如下:
package mainimport "fmt"func main() {head := &TreeNode{Val: 5}head.Left = &TreeNode{Val: 3}head.Right = &TreeNode{Val: 7}head.Left.Left = &TreeNode{Val: 2}head.Left.Right = &TreeNode{Val: 4}head.Right.Left = &TreeNode{Val: 6}head.Right.Right = &TreeNode{Val: 8}ret := IsBalanced(head)fmt.Println("是否是平衡树:", ret)}//Definition for a binary tree node.type TreeNode struct {Val intLeft *TreeNodeRight *TreeNode}type Info struct {IsBalanced boolHeight int}func IsBalanced(head *TreeNode) bool {return process(head).IsBalanced}func process(head *TreeNode) *Info {if head == nil {return &Info{IsBalanced: true}}leftInfo := process(head.Left)//左不平衡if !leftInfo.IsBalanced {return leftInfo}rightInfo := process(head.Right)//右不平衡if !rightInfo.IsBalanced {return rightInfo}//高度差大于1if Abs(leftInfo.Height, rightInfo.Height) > 1 {return new(Info)}//通过所有考验return &Info{IsBalanced: true, Height: GetMax(leftInfo.Height, rightInfo.Height) + 1}}func GetMax(a int, b int) int {if a > b {return a} else {return b}}func Abs(a int, b int) int {if a > b {return a - b} else {return b - a}}
执行结果如下:
***
[左神java代码](https://github.com/algorithmzuo/algorithmbasic2020/blob/master/src/class12/Code03_IsBalanced.java)
[评论](https://user.qzone.qq.com/3182319461/blog/1618268357)
