您的位置:首页 > Web前端

剑指offer36--二叉树的深度

2016-06-24 21:26 316 查看
一、题目


题目一:输入一棵二叉树的根结点,求该树的深度。从根结点到叶子点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。


二、平衡二叉树


输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1 ,那么它就是一棵平衡二叉树。


三、思想

最简单的方式就是使用递归的方式来遍历二叉树,在递归的处理函数中逐渐增加二叉树的深度

平衡二叉树的思想和上面的二叉树的思想其实差不多,不过平衡二叉树是比较left和right的差值


四、程序

package 剑指offer;
/*题目一:输入一棵二叉树的根结点,求该树的深度。从根结点到叶子点依次经过的结点
*(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
*/
public class Test39 {
public static int TreeDeepth(BinaryNode root){
if(root == null){
return 0;
}

int left = TreeDeepth(root.left);
int right = TreeDeepth(root.right);

if(left > right){
return left + 1;
}else{
return right + 1;
}
}

// 判断一个数是否是平衡二叉树
public static boolean isBalanced(BinaryNode root){
if(root == null){
return true;
}

int left = TreeDeepth(root.left);
int right = TreeDeepth(root.right);

int differ = left - right;
if(differ > 1 || differ < -1){
return false;
}

return isBalanced(root.left) && isBalanced(root.right);
}

public static boolean isBalanced2(BinaryNode root){
if(root == null){
return true;
}

int left = TreeDeepth(root.left);
int right = TreeDeepth(root.right);

int differ = left - right;
if(differ > 1 || differ < -1){
return false;
}

return isBalanced(root.left) && isBalanced(root.right);
}

public static void main(String args[]){
// 完全二叉树
//             1
//         /      \
//        2        3
//       /\       / \
//      4  5     6   7
BinaryNode n1 = new BinaryNode(1);
BinaryNode n2 = new BinaryNode(1);
BinaryNode n3 = new BinaryNode(1);
BinaryNode n4 = new BinaryNode(1);
BinaryNode n5 = new BinaryNode(1);
BinaryNode n6 = new BinaryNode(1);
BinaryNode n7 = new BinaryNode(1);

n1.left = n2;
n1.right = n3;
n2.left = n4;
n2.right = n5;
n3.left = n6;
n3.right = n7;

System.out.println(isBalanced(n1));
//System.out.println(isBalanced2(n1));
System.out.println("----------------");
}
}
class BinaryNode{
int value;
BinaryNode left;
BinaryNode right;

public BinaryNode(int value){
this.value = value;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: