剑指offer:判断是否是平衡二叉树

这种写法,效率比较高,每一个节点只访问一次。

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

class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
        
        int depth = 0;
        return isBalanceTree(pRoot,depth);
    }

    /* 后序遍历,这样每一个节点,只访问一次 */
    bool isBalanceTree(TreeNode* pRoot, int& depth)
    {
        if(pRoot == NULL)
        {
            depth = 0;
            return true;
        }

        int left = 0;
        int right = 0;
        if(isBalanceTree(pRoot->left,left) && isBalanceTree(pRoot->right,right))
        {
            int deff = left - right;
            if(deff <= 1 && deff >= -1)
            {
                depth = left > right ? left : right;
                depth += 1;
                return true;
            }			
        }

        return false;
    }
};
    原文作者:平衡二叉树
    原文地址: https://blog.csdn.net/u010889616/article/details/48933209
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞