现在的位置: 首页 > 综合 > 正文

cc150:判断一棵树是否为平衡树

2019年11月03日 ⁄ 综合 ⁄ 共 639字 ⁄ 字号 评论关闭

        判断一棵树是否平衡,需要注意的是和判断一棵树是否为平衡二叉树的区别。 平衡二叉树的定义为:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1, 并且左右两个子树都是一 棵平衡二叉树。 此时指的是这棵树任意两个叶子结点到根结点的距离之差不大于1。

节点定义为:

struct Node{
    int key;
    Node *lchild, *rchild, *parent;
};

只需要求出离根结点最近和最远的叶子结点,然后看它们到根结点的距离之差是否大于1即可。

void getDepth(Node *head){
    if(head == NULL) return;
    ++d;
    getDepth(head->lchild);
    if(head->lchild == NULL && head->rchild == NULL)
        dep[num++] = d;
    getDepth(head->rchild);
    --d;
}

求出所有叶子结点到根结点的距离后,再求出其中的最大值和最小值, 然后作差与1比较即可。此外,空树认为是平衡的。代码如下:

bool isBalance(Node *head){
    if(head == NULL) return true;
    getDepth(head);
    int max = dep[0], min = dep[0];
    for(int i=0; i<num; ++i){
        if(dep[i]>max) max = dep[i];
        if(dep[i]<min) min = dep[i];
    }
    if(max-min > 1) return false;
    else return true;
}

抱歉!评论已关闭.