面试题39:获得二叉树深度和判断是否是平衡二叉树

1, 二叉树深度,一个简单的递归

2, 是否是平衡二叉树,一个略复杂的递归

见代码:

#include<iostream>

using namespace std;

struct TreeNode{
    TreeNode* pleft;
    TreeNode* pright;
    int value;

    TreeNode(int v){
        value =  v;
        pleft = NULL;
        pright = NULL;
    }
};

TreeNode* build_tree(){
    TreeNode* T1 = new TreeNode(1);
    TreeNode* T2 = new TreeNode(2);
    TreeNode* T3 = new TreeNode(3);
    TreeNode* T4 = new TreeNode(4);
    TreeNode* T5 = new TreeNode(5);
    TreeNode* T6 = new TreeNode(6);
    TreeNode* T7 = new TreeNode(7);
    TreeNode* T8 = new TreeNode(8);
    TreeNode* T9 = new TreeNode(9);
    TreeNode* T10 = new TreeNode(10);
    TreeNode* T11 = new TreeNode(11);
    T1->pleft = T2;
    T1->pright = T3;
    T2->pleft = T4;
    T2->pright = T5;
    T3->pleft = T6;
    T3->pright = T7;
    T6->pleft = T8;
    T6->pright = T9;
    T9->pleft = T10;
    T9->pright = T11;
    return T1;
}

int get_deeps(TreeNode* root){
    if(root == NULL){
        return 0;
    }
    int left_deeps = get_deeps(root->pleft);
    int right_deeps = get_deeps(root->pright);
    return left_deeps > right_deeps? (left_deeps+1):(right_deeps+1);
    
}

bool is_balance(TreeNode* root){
    if(root == NULL){
        return true;
    }
    int left_deeps = get_deeps(root->pleft);
    int right_deeps = get_deeps(root->pright);
    int diff = left_deeps - right_deeps;
    if(diff > 1 || diff < -1){
        return false;
    }
    return is_balance(root->pleft) && is_balance(root->pright);
}
int main(){
    //             1
    //           /   \
    //          2     3
    //         / \    / \
    //        4   5  6   7
    //               / \
    //              8   9
    //                 / \
    //                10 11
    TreeNode* root = build_tree();
    int deeps = get_deeps(root);
    cout << "deeps: "<< deeps << endl;
    bool is_balanced = is_balance(root);
    cout << "balance:" << is_balanced << endl;
    return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值