博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法-树-平衡二叉树
阅读量:3961 次
发布时间:2019-05-24

本文共 3512 字,大约阅读时间需要 11 分钟。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

方法二 自底向上

在这里插入图片描述

class Solution {
public boolean isBalanced(TreeNode root) {
return height(root) >= 0; } public int height(TreeNode root) {
if (root == null) {
return 0; } int leftHeight = height(root.left); int rightHeight = height(root.right); if (leftHeight == -1 || rightHeight == -1 || Math.abs(leftHeight - rightHeight) > 1) {
return -1; } else {
return Math.max(leftHeight, rightHeight) + 1; } }}

方法一 自顶向下

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode() {} *     TreeNode(int val) { this.val = val; } *     TreeNode(int val, TreeNode left, TreeNode right) { *         this.val = val; *         this.left = left; *         this.right = right; *     } * } */class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true; } //先判断当前节点 然后判断左右节点 return Math.abs(height(root.left) - height(root.right)) <= 1 && isBalanced(root.left) && isBalanced(root.right); } public int help(TreeNode root) {
if(root == null) {
return 0; } int left = height(root.left); int right = height(root.right); return Math.max(left, right) + 1; }}

这个也是自底向上

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode() {} *     TreeNode(int val) { this.val = val; } *     TreeNode(int val, TreeNode left, TreeNode right) { *         this.val = val; *         this.left = left; *         this.right = right; *     } * } */class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true; } //判断当前节点时,先判断左右节点 return isBalanced(root.left) && isBalanced(root.right) && Math.abs(help(root.left) - help(root.right)) <= 1; } public int help(TreeNode root) {
if(root == null) {
return 0; } int left = help(root.left); int right = help(root.right); return Math.max(left, right) + 1; }}

用层序遍历的方法求二叉树的高度

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode() {} *     TreeNode(int val) { this.val = val; } *     TreeNode(int val, TreeNode left, TreeNode right) { *         this.val = val; *         this.left = left; *         this.right = right; *     } * } */class Solution {
public boolean isBalanced(TreeNode root) {
if(root == null) {
return true; } return isBalanced(root.left) && isBalanced(root.right) && Math.abs(help(root.left) - help(root.right)) <= 1; } public int help(TreeNode root) {
if(root == null) {
return 0; } Queue
queue = new LinkedList<>(); queue.offer(root); int res = 0; while(!queue.isEmpty()) {
int size = queue.size(); while(size > 0) {
TreeNode cur = queue.poll(); size--; if(cur.left != null) {
queue.offer(cur.left); } if(cur.right != null) {
queue.offer(cur.right); } } //执行到这里一行就执行完了 res++; } return res; }}

转载地址:http://jmhzi.baihongyu.com/

你可能感兴趣的文章
类图(Class diagram)—UML图(二)
查看>>
对象图(Object Diagram)—UML图(三)
查看>>
活动图(Activity Diagram)—UML图(四)
查看>>
状态图(Statechart Diagram)—UML图(五)
查看>>
时序图(Sequence Diagram)—UML图(六)
查看>>
构件图(Component Diagram)—UML图(八)
查看>>
部署图(Deployment Diagram)—UML图(九)
查看>>
协作图(Collaboration Diagram)—UML图(七)
查看>>
什么是RUP
查看>>
什么是UML(UML总结)
查看>>
UML基础与应用系列文章汇总
查看>>
C#方法重载(overload)方法重写(override)隐藏(new)
查看>>
javascript实现滚动图片
查看>>
css+div练手-工作室
查看>>
CSS+DIV布局之道
查看>>
CSS+DIV练手-公司
查看>>
CSS+DIV练手—鲜花展
查看>>
深入浅出JavaScript(1)—ECMAScript
查看>>
深入浅出JavaScript(2)—ECMAScript
查看>>
Asp.Net+Jquery.Ajax详解1-开篇
查看>>