劍指Offer對答如流系列 - 二叉樹的深度

面試題55:二叉樹的深度

一、題目描述

問題(1)二叉樹的深度
輸入一棵二叉樹的根結點,求該樹的深度。從根結點到葉結點依次經過的/結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。

問題(2)平衡二叉樹
輸入一棵二叉樹的根結點,判斷該樹是不是平衡二叉樹。如果某二叉樹中任意結點的左右子樹的深度相差不超過1,那麼它就是一棵平衡二叉樹。

二、問題分析

問題(1)分析
第一個問題對大家都小意思啦,樹的深度=max(左子樹深度,右子樹深度)+1,採用遞歸實現。

問題(2)分析
同樣需要計算樹的深度,樹的深度=max(左子樹深度,右子樹深度)+1。
在遍歷過程中,需要判斷左右子樹深度相差是否超過1,如果不平衡,則令樹的深度=-1。最終根據樹的深度是否等於-1來確定該樹是不是平衡樹。

三、問題解答

問題(1)

	 public int TreeDepth(Node root) {
        if(root==null) {
            return 0;
        }
        int left=TreeDepth(root.left);
        int right=TreeDepth(root.right);
        return Math.max(left+1,right+1);
    }

問題(2)

	// 主程序
    public boolean IsBalanced_Solution(Node root) {
        return getDepth(root)!=-1;
    }

    public int getDepth(Node 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);
    }
發佈了194 篇原創文章 · 獲贊 3472 · 訪問量 53萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章