标签:imp pre 接收 .net 一个 msm sdn 详细设计 判断
平衡二叉树的性质为:要么是一颗空树,要么任何一个节点的左右子树高度差的绝对值不超过1。给定一棵二叉树的头结点head,判断这棵二叉树是否为平衡二叉树。
难度:??
以下是个人认为对概念叙述较为详细的参考链接:
初始树节点模型
class Node {
int value;
Node left;
Node right;
Node(int value) {
this.value = value;
}
}
布尔的判断,假定一个布尔首索引值true,通过判断平衡二叉树的具体方法将决定假定布尔值是否改变,调用该方法后,并返回布尔数组的首索引值。
public boolean isBalance(Node node) {
boolean[] booleans = new boolean[1];
booleans[0] = true;
getHeight(node, 0, booleans);
return booleans[0];
}
判断是否为平衡二叉树的具体方法
public int getHeight(Node node, int level, boolean[] booleans) {
if (head == null) {
return level;
}
int l = getHeight(node.left, level + 1, booleans);
int r = getHeight(node.right, level + 1, booleans);
if (Math.abs(l - r) > 1) {
booleans[0] = false;
}
return Math.max(l, r);
}
import org.junit.Test;
/**
* @author lorem
*/
public class BalanceTreeGoTest {
class Node {
int value;
Node left;
Node right;
Node(int value) {
this.value = value;
}
}
public boolean isBalance(Node node) {
boolean[] booleans = new boolean[1];
booleans[0] = true;
getHeight(node, 0, booleans);
return booleans[0];
}
public int getHeight(Node node, int level, boolean[] booleans) {
if (node == null) {
return level;
}
int l = getHeight(node.left, level + 1, booleans);
int r = getHeight(node.right, level + 1, booleans);
if (Math.abs(l - r) > 1) {
booleans[0] = false;
}
return Math.max(l, r);
}
@Test
public void test() {
Node node = new Node(1);
node.left = new Node(2);
node.right = new Node(3);
node.left.left = new Node(4);
node.left.left.left = new Node(5);
System.out.println(isBalance(node));
}
}
以此类二叉树为例,并结合代码演示推导过程
左分支推导同理
标签:imp pre 接收 .net 一个 msm sdn 详细设计 判断
原文地址:https://www.cnblogs.com/loremwalker/p/9723168.html