题目一(二叉树的深度)
输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的/结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。
思路
树的深度=max(左子树深度,右子树深度)+1;
测试用例
1.功能测试(左斜树、右斜树、普通树)
2.边界值测试(一个结点)
3.特殊测试(null)
代码
public class TreeDepth {
public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
//构造函数
public TreeNode(int val){
this.val=val;
}
}
public static void constrctTree(TreeNode root, TreeNode left,TreeNode right){
root.left=left;
root.right=right;
return;
}
public static int TreeDepth(TreeNode root){
if(root==null)
return 0;
int left=TreeDepth(root.left);
int right=TreeDepth(root.right);
return Math.max(left+1,right+1);
}
public static void main(String[] args) {
TreeNode nodeA1=new TreeNode(1);
TreeNode nodeA2=new TreeNode(2);
TreeNode nodeA3=new TreeNode(3);
TreeNode nodeA4=new TreeNode(4);
TreeNode nodeA5=new TreeNode(5);
TreeNode nodeA6=new TreeNode(6);
TreeNode nodeA7=new TreeNode(7);
constrctTree(nodeA1,nodeA2,nodeA3);
constrctTree(nodeA2,nodeA4,nodeA5);
nodeA3.right=nodeA6;
nodeA5.left=nodeA7;
System.out.println(TreeDepth(nodeA1));
}
}
题目二(平衡二叉树的判断)
输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。
public class IsBalanced {
public static class TreeNode{
int val=0;
TreeNode left=null;
TreeNode right=null;
//构造函数
public TreeNode(int val){
this.val=val;
}
}
public static void constrctTree(TreeNode root, TreeNode left,TreeNode right){
root.left=left;
root.right=right;
return;
}
public static boolean isBalancedTree(TreeNode root){
return getDepth(root)!=-1;
}
public static int getDepth(TreeNode root){
if(root==null) return 0;
int left=getDepth(root.left);
if(left==-1)return -1;
int right=getDepth(root.right);
if(right==-1)return -1;
return Math.abs(left-right)>1?-1:1+Math.max(left,right);
}
public static void main(String[] args) {
TreeNode nodeA1=new TreeNode(1);
TreeNode nodeA2=new TreeNode(2);
TreeNode nodeA3=new TreeNode(3);
TreeNode nodeA4=new TreeNode(4);
TreeNode nodeA5=new TreeNode(5);
TreeNode nodeA6=new TreeNode(6);
TreeNode nodeA7=new TreeNode(7);
constrctTree(nodeA1,nodeA2,nodeA3);
constrctTree(nodeA2,nodeA4,nodeA5);
nodeA3.right=nodeA6;
nodeA5.left=nodeA7;
System.out.println(isBalancedTree(nodeA1));
}
}