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

代码实现:

public class BinaryTreeNode{
     int value;
     BinaryTreeNode left;
     BinaryTreeNode right;
     
     public BinaryTreeNode(int data,BinaryTreeNode node1,BinaryTreeNode node2){
          this.value=data;
          this.left=node1;
          this.right=node2;
     }
}
public class Solution{
     public static int treeDepth(BinaryTreeNode node){
          if(node==null){
              return 0;
          }
          int left=treeDepth(node.left);
          int right=treeDepth(node.right);
          return left>right?(left+1):(right+1);
     }

     public static void main(String[] args){
          BinaryTreeNode node7=new BinaryTreeNode(7,null,null);
          BinaryTreeNode node6=new BinaryTreeNode(6,null,null);
          BinaryTreeNode node5=new BinaryTreeNode(5,node7,null);
          BinaryTreeNode node4=new BinaryTreeNode(4,null,null);
          BinaryTreeNode node3=new BinaryTreeNode(3,null,node6);
          BinaryTreeNode node2=new BinaryTreeNode(2,node4,node5);
          BinaryTreeNode node1=new BinaryTreeNode(1,node2,node3); 
          int depth=treeDepth(node1);
          System.out.println(depth);       
     }
}

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

方法一:

public class Solution{
    public static boolean isBalanced(BinaryTreeNode node){
         if(node==null){
              return true;
         }
         int left=treeDepth(node.left);
         int right=treeDepth(node.right);
         int diff=left-right;
         if(diff>1||diff<-1){
              return false;
         }
         return isBalanced(node.left)&&isBalanced(node.right);
    }

    public static int treeDepth(BinaryTreeNode node){
        if(node==null){
             return 0;
        }
        int left=treeDepth(node.left);
        int right=treeDepth(node.right);
        return left>right?(left+1):(right+1);
    }
  
     public static void main(String[] args){
        BinaryTreeNode node7=new BinaryTreeNode(7,null,null);
        BinaryTreeNode node6=new BinaryTreeNode(6,null,null);
        BinaryTreeNode node5=new BinaryTreeNode(5,node7,null);
        BinaryTreeNode node4=new BinaryTreeNode(4,null,null);
        BinaryTreeNode node3=new BinaryTreeNode(3,null,node6);
        BinaryTreeNode node2=new BinaryTreeNode(2,node4,node5);
        BinaryTreeNode node1=new BinaryTreeNode(1,node2,node3);
        System.out.println(isBalanced(node1));
     }
}

方法二(高效):

      后序遍历二叉树,只需要遍历一遍。

public class Solution{
    public static boolean isBalanced(BinaryTreeNode node){
         return getDepth(node)!=-1;
    }

    public static int getDepth(BinaryTreeNode node){
        if(node==null){
             return 0;
        }
        int left=getDepth(node.left);
        if(left==-1){
             return -1;
        }
        int right=getDepth(node.right);
        if(right==-1){
             return -1;
        }
        return Math.abs(left-right)>1?-1:Math.max(left,right)+1;
    }

    public static void main(String[] args){
        BinaryTreeNode node7=new BinaryTreeNode(7,null,null);
        BinaryTreeNode node6=new BinaryTreeNode(6,null,null);
        BinaryTreeNode node5=new BinaryTreeNode(5,node7,null);
        BinaryTreeNode node4=new BinaryTreeNode(4,null,null);
        BinaryTreeNode node3=new BinaryTreeNode(3,null,node6);
        BinaryTreeNode node2=new BinaryTreeNode(2,node4,node5);
        BinaryTreeNode node1=new BinaryTreeNode(1,node2,node3);
        System.out.println(isBalanced(node1));
     }
}

 

 posted on 2018-11-25 14:13  会飞的金鱼  阅读(124)  评论(0)    收藏  举报