zoukankan      html  css  js  c++  java
  • 平衡二叉树

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
    题目描述
    输入一棵二叉树,判断该二叉树是否是平衡二叉树。


    知识介绍:

    • 平衡二叉树,是一种二叉排序树,它的每个结点的左子树和右子树的高度差不超过1。是一种高度平衡的二叉排序树。

    思路:

    • 采用深度优先搜索的方式获取根节点的左子树、右子树的高度并计算高度差,若高度差大于1则直接返回,若小于等于1,则以左子树的根节点作为新的二叉树,递归遍历该子树的左右子树的高度及高度差,右子树同理。
    class Solution {
    public:
        bool IsBalanced_Solution(TreeNode* pRoot) {
            if(!pRoot)
                return true;
            //得到的是整棵树的高度
            int ldepth = TreeDepth(pRoot->left);
            int rdepth = TreeDepth(pRoot->right);
            if(abs(ldepth-rdepth) > 1)
                return false;
            //递归左子树、右子树的高度
            return IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right);
        }
        int TreeDepth(TreeNode* root)
        {
            if(!root)
                return 0;
            int ldepth = TreeDepth(root->left);
            int rdepth = TreeDepth(root->right);
            return 1+(ldepth>rdepth?ldepth:rdepth);
        }
    };
    
    • 采用后序遍历,从叶子结点开始,判断左子树与右子树的高度差是否符合平衡二叉树的条件
    class Solution {
    public:
        bool IsBalanced_Solution(TreeNode* pRoot) {
            int depth = 0;
            return IsBalanced_Solution(pRoot,depth);
        }
        bool IsBalanced_Solution(TreeNode* pRoot,int &depth)
        {
            if(!pRoot)
            {
                depth = 0;
                return true;
            }
                 
            int ldepth,rdepth;
            if(IsBalanced_Solution(pRoot->left,ldepth)&&IsBalanced_Solution(pRoot->right,rdepth))
            {
                if(abs(ldepth - rdepth) <=1)
                {
                    depth = 1 + max(ldepth,rdepth);
                    return true;
                }
            }
            return false;
        }
    };
    
    
  • 相关阅读:
    MCPD 70536题目 自定义打印参数
    《ERP从内部集成起步》读书笔记——第5章 MRP系统的时间概念 5.1 时间三要素 5.1.2 时段
    Jquey拖拽控件Draggable用法
    MCPD 70536题目 反射
    MCPD 70536题目 非托管资源 释放
    VS2008创建Silverlight项目时出错解决方法
    程序猿去旅行
    EntityFramework5.0 数据迁移笔记解决模型变化重建数据库的问题
    完美生活
    一直很安静
  • 原文地址:https://www.cnblogs.com/whiteBear/p/12612103.html
Copyright © 2011-2022 走看看