(判断)平衡二叉树

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/q943520218/article/details/100088844

题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

又一个水题、、、、、

平衡二叉树就是,

一、根节点左右子树为空,或者左右子树高度差为1的树

二、同时根节点的左右子树也满足一

可以采取前一题中的层序遍历判断高度来判断,略微修改即可得

        bool IsBalanced_Solution(TreeNode* pRoot)
        {
            bool avg = true;
            TreeDepth(pRoot, avg);
            return avg;
        }


        int TreeDepth(TreeNode* pRoot, bool & avg)
        {
            if (pRoot == nullptr)
            {
                return 0;
            }

            int l = TreeDepth(pRoot->left, avg);
            int r = TreeDepth(pRoot->right, avg);

            int max = l;
            int min = r;
            if (l < r)
            {
                max = r;
                min = l;
            }
            int cha = max - min;
            if (cha > 1)
            {
                avg = false;
            }

            return  (l < r ? r : l) + 1;
        }

二、优化

     可采取从叶子节点遍历到根节点的方法,截支,避免重复计算

猜你喜欢

转载自blog.csdn.net/q943520218/article/details/100088844