判斷平衡二叉樹

平衡二叉樹的定義:對於任一結點,其左右子樹高度之差不大於1。

因此解決該問題自然而然就想到改寫求二叉樹的高度的算法。

如下爲求二叉樹高度的算法

     public int getHeight(TreeNode root) {
         if(root == null) {
             return 0;
         }
         int leftHeight = getBlanceHeight(root.left);
         int rightHeight = getBlanceHeight(root.right);
         return Math.max(leftHeight, rightHeight) + 1; 
     }

現在我們需要新的返回值返回是否爲平衡二叉樹,但是計算高度函數已經佔據了返回值。但是我們發現高度總是爲正的,因此我們可以使用一個負數標記爲非平衡二叉樹。

具體實現代碼如下:

     public boolean isBalanced(TreeNode root) {
         return getBlanceHeight(root) != -1;
     }
     /**
      * 獲取平衡二叉樹的高度 若非平衡二叉樹返回-1
      * @return height or -1
      */
     public int getBlanceHeight(TreeNode root) {
         if(root == null) {
             return 0;
         }
         int leftHeight = getBlanceHeight(root.left);
         if(leftHeight == -1) {
             return -1;
         }
         int rightHeight = getBlanceHeight(root.right);
         if(rightHeight == -1) {
             return -1;
         }
         return Math.abs(leftHeight - rightHeight) <= 1 ? 
             Math.max(leftHeight, rightHeight) + 1 : -1; 
     }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章