剑指offer-面试题55-平衡二叉树-递归

/*
题目:
	判断二叉树是否为平衡二叉树。
*/
/*
思路:
	判断二叉树的左子树和右子树高度相差是否为1.
*/
#include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map>

using namespace std;

struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};

bool isBalanced(TreeNode* pRoot,int &depth){
    if(pRoot == nullptr){
        return true;
    }
    int leftDepth = 0;
    int rightDepth = 0;

	//若左右子树都平衡
    if(isBalanced(pRoot->left,leftDepth) && isBalanced(pRoot->right,rightDepth)){
        int diff = leftDepth - rightDepth;
        if(diff <= 1 && diff >= -1){
            depth = max(leftDepth,rightDepth) + 1;
            return true;
        }
    }
    return false;

}

bool isBalanced(TreeNode* pRoot){
    int depth = 0;
    return isBalanced(pRoot,depth);
}

int main(){
    TreeNode* node = new TreeNode(1);
    TreeNode* node1 = new TreeNode(2);
    TreeNode* node2 = new TreeNode(3);
    TreeNode* node3 = new TreeNode(4);
    TreeNode* node4 = new TreeNode(5);
    TreeNode* node5 = new TreeNode(6);
    TreeNode* node6 = new TreeNode(7);
    node->left = node1;
    node->right = node2;
    node1->left = node3;
    node1->right = node4;
    node2->right = node5;
    node4->left = node6;
    cout<<isBalanced(node);
}

   

原文地址:https://www.cnblogs.com/buaaZhhx/p/12097766.html