1. 程式人生 > >平衡二叉樹的判斷-->後序遍歷

平衡二叉樹的判斷-->後序遍歷

題目描述

輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 此題有解法一:依次從根節點開始,判斷所有節點的左右子樹是否平衡,但這樣一來,排在底層的節點可能要被多次重複遍歷,所以此方法複雜度高,不推薦。 解法二:後序遍歷,左-->右-->根,這樣一來,可以“一邊遍歷,一邊判斷”,且如果前期就判斷為false,那麼後面就不用判斷了。 後序遍歷的精髓:在遞迴中新增臨時變數,深刻體會。
class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
        int depth;
        return IsBalanced(pRoot,&depth);
    }

    bool IsBalanced(TreeNode* pRoot,int*pDepth){
        if(pRoot==NULL){
            *pDepth=0;
            return true;
        }

        int leftdepth,rightdepth; //在遞迴中宣告臨時變數,用於求父節點傳來的指標對應的值。
        if(IsBalanced(pRoot->left,&leftdepth)&&IsBalanced(pRoot->right,&rightdepth)){
            if(abs(leftdepth-rightdepth)<=1){
                *pDepth=leftdepth>rightdepth?leftdepth+1:rightdepth+1;
                return true;
            }
        }
        return false;

    }
};