首页 > 其他分享 >JZ79 判断是不是平衡二叉树

JZ79 判断是不是平衡二叉树

时间:2024-04-22 21:58:13浏览次数:14  
标签:right int JZ79 pRoot deep 二叉树 平衡 left

image
image
image
image

class Solution {
public:
    //求深度
    int deep(TreeNode* root)
    {
        
        if(root == NULL)
            return 0;
        //求左右子树的深度
        int left = deep(root->left);
        int right = deep(root->right);
        
        return (left > right) ? left+1 : right+1;
    }

    bool IsBalanced_Solution(TreeNode* pRoot) {
        // write code here
        //平衡二叉树:左右子树的深度不超过1 
        //也就是每个根节点的左右子树的差都不超过1
        //思路:先序遍历,分别求根节点的左右子树的深度,然后判断是否超过1
        if(pRoot == NULL)   
            return true;

        //判断根节点是否是平衡二叉树
        int left = deep(pRoot->left );
        int right = deep(pRoot->right);

        if(left - right > 1 || left - right < -1)
            return false;

        //判断左右子树是不是平衡二叉树
        
        return (IsBalanced_Solution(pRoot->left) && IsBalanced_Solution(pRoot->right));

    }
};

标签:right,int,JZ79,pRoot,deep,二叉树,平衡,left
From: https://www.cnblogs.com/H43724334/p/18151626

相关文章

  • 平衡树
    由于我们学过数据结构,在二叉搜索树中,如果给出的数据是一条链的话,那么每次查询等操作都是O(n)的级别,所以为了优化搜索查找修改的效率,需要创建平衡树,来达到logn级别的查询和修改对于一颗二叉搜索树,我们可以将它进行分裂操作,假如我们要进行查询一个数$u$那么我们就可以分......
  • 【二叉树的前中后序遍历】迭代法
    三种遍历都是用栈维护二叉树前序遍历节点顺序前序遍历模拟前序遍历即可,记录顺序和入栈顺序一致classSolution{publicList<Integer>preorderTraversal(TreeNoderoot){List<Integer>ans=newArrayList<>();if(root==null)returnans;......
  • JZ86 在二叉树中找到两个节点的最近公共祖先
    classSolution{public://用来判断是否找到节点boolflag=false;//dfs遍历得到路径,递归遍历,也就是先序遍历根左右//传入参数:节点,容器,要找的值voiddfs(TreeNode*root,vector<int>&path,into){//判断根节点的值是否是要找的......
  • 【根据前序和中序遍历构造二叉树】栈+迭代 || 递归
    105.从前序与中序遍历序列构造二叉树栈+迭代规律前序遍历中相邻节点u和v,v节点一定是u节点的左节点或者是其自身某个祖先的右节点一个没有右节点的链,中序遍历是从叶子到根,前序遍历是从根到叶子解题思路用一个栈维护前序遍历的节点用一个指针p指向中序遍历的第一个叶子节......
  • 给出二叉树的前序遍历和中序遍历--还原二叉树
    voidf(intidxroot){ //根据前序遍历和中序遍历还原二叉树if(idxroot==n+1)return;introot=pre[idxroot];boolcheck=true;map<int,int>lcmp,rcmp;//当前节点的左孩子集合和右孩子集合for(inti=1;i<=n;i++){if(vis[mid[i]]&&mid[i]!......
  • JZ32 从上往下打印二叉树
    /*structTreeNode{intval;structTreeNode*left;structTreeNode*right;TreeNode(intx):val(x),left(NULL),right(NULL){}};*/classSolution{public:vector<int>PrintFromTopToBottom(TreeNode*root){......
  • 树3-二叉树非递归遍历(栈)
    树3-二叉树非递归遍历(栈)拷贝根结点,初始值FALSE,入栈弹出,如果是FALSE,将根节点将更新为TRUE,其子结点(初始值FALSE)一并入栈[A,B,C](前序遍历,入栈顺序:C,B,A输出顺序:A,B,C)再弹出,如果是TRUE则输出引入链式栈头文件#include"linkedStack.h"链式栈头文......
  • JZ36二叉树排序树与双向链表
    /*structTreeNode{ intval; structTreeNode*left; structTreeNode*right; TreeNode(intx): val(x),left(NULL),right(NULL){ }};*/#include<cstddef>classSolution{public: TreeNode*ans=nullptr; //最终的链表 TreeNode*pre=nullptr; ......
  • 树1-二叉树概念与遍历方法
    树1:二叉树概念与遍历方法二叉树二叉树的遍历二叉树遍历分为前序,中序,后序.序是指遍历根结点的顺序D-data,根L左R右,先序遍历ABCDE-FGH中序遍历BDCE-A-FHG后序遍历DECB-HGF-A先序遍历ABDH-I-EJCFG中序遍历HDI-B-JEAFCG后序遍历HID-J......
  • 树2-二叉树拷贝, 遍历, 计算叶子结点和高度
    树2-二叉树拷贝,遍历,计算叶子结点和高度二叉树结点typedefstructBinaryNode{charch;structBinaryNode*lChild;structBinaryNode*rChild;}BinaryNode;//叶子结点的数量intsum;二叉树遍历前序//递归遍历(前序)voidRecursion(BinaryNode*roo......