平衡二叉樹的判斷-->後序遍歷
阿新 • • 發佈:2019-01-25
題目描述
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。 此題有解法一:依次從根節點開始,判斷所有節點的左右子樹是否平衡,但這樣一來,排在底層的節點可能要被多次重複遍歷,所以此方法複雜度高,不推薦。 解法二:後序遍歷,左-->右-->根,這樣一來,可以“一邊遍歷,一邊判斷”,且如果前期就判斷為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; } };