//判断一个树是不是平衡二叉树 //任何节点的左子树和右子树高度差不超过1 public class BalanceTree { public static void main(String[] args) { Node root = new Node(1); root.left = new Node(2); root.right = new Node(3); root.left.left = new Node(4); root.left.right = new Node(5); root.right.left = new Node(6); root.right.right = new Node(7); root.left.right.left = new Node(8); root.left.right.left.left = new Node(9); System.out.println(isB(root)); } public static boolean isB(Node head) { return process(head).isB; } public static returnData process(Node head) { if (head == null) { return new returnData(true, 0); } returnData leftData = process(head.left); if (!leftData.isB) { return new returnData(false, 0); } returnData rightData = process(head.right); if (!rightData.isB) { return new returnData(false, 0); } if (Math.abs(leftData.h - rightData.h) > 1) { return new returnData(false, 0); } return new returnData(true, Math.max(leftData.h, rightData.h) + 1); } public static class returnData { boolean isB; int h; public returnData(boolean isB, int h) { this.isB = isB; this.h = h; } } public static class Node { Node left; Node right; int value; public Node(int value) { this.value = value; } } }
来源:博客园
作者:moreas
链接:https://www.cnblogs.com/moris5013/p/11670262.html