二叉树高度计算,判定是否为平衡二叉树

二叉树节点:

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

计算二叉树高度

 int treeHeight(TreeNode *node)
    {
        if(node == nullptr)
            return 0;
        int left = treeHeight(node->left);
        //cout << "left:" << left << endl;
        int right = treeHeight(node->right);
        //cout << "right" << right << endl;
        return max(left, right) + 1;
    }

判断是否为平衡二叉树(左右子树高度差小于等于1)

  // 判定左右子树是否是平衡的 -1不平衡
    int balance(TreeNode * node)
    {
        if(node == nullptr)
            return 0;
        int left = balance(node->left);
        if(left == -1)
            return -1;
        int right = balance(node->right);
        if(right == -1)
            return -1;
        return abs(left - right) > 1 ? -1 : 1+max(left, right); 
    }

 

posted @ 2020-10-27 19:50  低调小怪  阅读(388)  评论(0编辑  收藏  举报