5.25打卡:劍指 offer兩題:二叉樹的深度/平衡二叉樹

二叉樹的深度

題目描述

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

/*
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;
    }
};

 

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