二叉樹的深度
題目描述
輸入一棵二叉樹,求該樹的深度。從根結點到葉結點依次經過的結點(含根、葉結點)形成樹的一條路徑,最長路徑的長度爲樹的深度。
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
int TreeDepth(TreeNode* pRoot)
{
//不空的話,往下遍歷,再加本層的1
if(pRoot != NULL) return 1 + max(TreeDepth(pRoot->left), TreeDepth(pRoot->right));
return 0;
}
};
平衡二叉樹
題目描述
輸入一棵二叉樹,判斷該二叉樹是否是平衡二叉樹。在這裏,我們只需要考慮其平衡性,不需要考慮其是不是排序二叉樹。
步驟:
平衡二叉樹定義:它是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。
思路:根據定義,我們只需要後序遍歷此樹,從樹的葉子節點開始計算高度,只要有一個子樹不滿足定義就返回-1,如果滿足繼續向上計算高度。
class Solution {
public:
bool IsBalanced_Solution(TreeNode* pRoot) {
return deepOfTree(pRoot) != -1;
}
int deepOfTree(TreeNode* pRoot) {
if(pRoot == NULL) return 0;
int a = deepOfTree(pRoot->left);
int b = deepOfTree(pRoot->right);
//根據定義,左子樹不是AVLTree或者
if(a == -1 || b == -1 || abs(a - b) > 1) return -1;
else return (a>b?a:b) + 1;
}
};