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

 

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