1.平衡二叉树定义:
平衡二叉树是:<一棵空树> || <每个节点的左右子树高度差不大于1的非空树>。
1.1 通过递归遍历每个节点,check是否每个节点的左右子树是否为平衡二叉树,并且2棵子树的高度差是否不大于1.
1.2 由于要返回2个不同类型的值,一个boolean值用于判断该子树是否平衡,另一个是该子树的高度。return只能返回同类型的若干值,所以
处理方法如下:return 返回boolean值,另一个返回值通过长度为1的数组int[] depth = new int[1];将返回值带回来。
class TreeNode{
int val;
TreeNode left;
TreeNode right;
public TreeNode(int val){
this.val = val;
this.left = null;
this.right = null;
}
}
public class Balance{
public static boolean recur(TreeNode root){
int[] depth = new int[1];
boolean result = recursive(root, depth);
System.out.println("depth="+depth[0]);
return result;
}
private static boolean recursive(TreeNode tNode, int[] depth){
if(tNode == null){
depth[0] = 0;
return true;
}
int[] leftDepth = new int[1];
int[] rightDepth = new int[1];
if(recursive(tNode.left, leftDepth)
&& recursive(tNode.right, rightDepth)
&& Math.abs(leftDepth[0] - rightDepth[0]) <= 1){
System.out.println("<"+tNode.val+">");//
depth[0] = 1 + Math.max(leftDepth[0], rightDepth[0]);
return true;
}else
return false;
}
public static void main(String[] args){
System.out.println("R0:"+recur(null));
}
}
1.空树是一棵平衡树
2.下图二叉树是一棵平衡树二叉树
验证代码:
TreeNode root = new TreeNode(0);
root.left = new TreeNode(1);
root.left.left = new TreeNode(3);
root.right = new TreeNode(2);
System.out.println("R:"+recur(root));
3.下图同样是一棵平衡二叉树,测试代码如下:
TreeNode root = new TreeNode(0);
root.left = new TreeNode(1);
root.left.left = new TreeNode(3);
root.left.left.left = new TreeNode(7);
root.left.left.left.left = new TreeNode(11);
root.left.right = new TreeNode(4);
root.left.right.right = new TreeNode(9);
root.right = new TreeNode(2);
root.right.left = new TreeNode(5);
root.right.left.left = new TreeNode(10);
root.right.right = new TreeNode(6);
root.left.left.right = new TreeNode(8);
System.out.println("R:"+recur(root));
以此类推:平衡二叉树中叶子节点可以出现在任何层(设root节点所在的层为第一层)