平衡二叉树例题_平衡二叉树

AcWing 72. 平衡二叉树

思路一:求每个节点的左右子树深度,根据深度差判断,直到叶子节点结束,效率不够高,每个节点都要用两次计算深度的递归函数

思路二:从叶子节点开始,计算深度差,一旦有深度差大于1的,就直接返回0,也不用管上面的深度是不是正确了,毕竟我们只需要true和false两种状态,省略了很多次深度的计算

思路二的代码

class Solution {

boolean balanced=true;

public boolean isBalanced(TreeNode root) {

getDepth(root);

return balanced;

}

int getDepth(TreeNode root){

if(root==null) return 0;

int left=getDepth(root.left);

if(!balanced) return 0;

int right=getDepth(root.right);

if(!balanced) return 0;

if(Math.abs(left-right)>1) {

balanced=false;

return 0;

}

return 1+Math.max(left,right);

}

}

737e7228e08e8ba02e74967ef8a4b161.png

发布于 2020-02-16

AcWing 72. Go 题解 平衡二叉树

Talke is cheap.

/**

* Definition for a binary tree node.

* type TreeNode struct {

* Val int

* Left *TreeNode

* Right *TreeNode

* }

*/

func isBalanced(root *TreeNode) bool {

return isBalan(root) != -1

}

func isBalan(root *TreeNode) int {

if root == nil {

return 0

}

left := isBalan(root.Left)

right := isBalan(root.Right)

if left == -1 || right == -1 || left - right > 1 || left - right < -1 {

return -1

}

if left > right {

return left + 1

}

return right + 1

}

737e7228e08e8ba02e74967ef8a4b161.png

发布于 2020-02-16

AcWing 72. 平衡二叉树

C++几行直接解决

算法

直接用高度h,平衡二叉树递归满足

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值