判断一颗树是否为平衡二叉树

  1. struct BinaryTreeNode
  2. {
  3. int m_Value;
  4. BinaryTreeNode* m_pLeft;
  5. BinaryTreeNode* m_pRight;
  6. };
  7. int height(BinaryTreeNode*node ,bool&balance)
  8. {
  9. if(node==NULL)
  10. {
  11. return 0;}
  12. int R=node->right?height(node->right,balance)+1:0;
  13. if(!balance)
  14. return 0;
  15. int l=node->left?height(node->left,balance)+1:0;
  16. if(!balance)
  17. return 0;
  18. int dif=l-r;
  19. if (dif<=1)
  20. {
  21. return (l>r?l:r)
  22. }
  23. }
  24. bool  isBalancedTree(node *root)
  25. {
  26. bool balance=tree;
  27. if(root)
  28. treehight(root,balance)
  29. return balance;
  30. }

//递归:

  1. struct BinaryTreeNode
  2. {
  3. int m_Value;
  4. BinaryTreeNode* m_pLeft;
  5. BinaryTreeNode* m_pRight;
  6. };
  7. int TreeDepth(BinaryTreeNode* pRoot)
  8. {
  9. if (pRoot == NULL)
  10. return 0;
  11. int nLeftDepth = TreeDepth(pRoot->m_pLeft);
  12. int nRightDepth = TreeDepth(pRoot->m_pRight);
  13. return (nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1);
  14. }

判断该树是否为平衡二叉树

方法一:调用上述函数求每个节点的左右孩子深度

[cpp] view plain copy

print?

    1. bool IsBalanced(BinaryTreeNode* pRoot)
    2. {
    3. if(pRoot== NULL)
    4. return true;
    5. int nLeftDepth = TreeDepth(pRoot->m_pLeft);
    6. int nRightDepth = TreeDepth(pRoot->m_pRight);
    7. int diff = nRightDepth-nLeftDepth;
    8. if (diff>1 || diff<-1)
    9. return false;
    10. return IsBalanced(pRoot->m_pLeft)&&IsBalanced(pRoot->m_pRight);
    11. }
时间: 2024-11-05 11:41:03

判断一颗树是否为平衡二叉树的相关文章

LeetCode:Same Tree - 判断两颗树是否相等

1.题目名称 Same Tree(判断两棵树是否相等) 2.题目地址 https://leetcode.com/problems/same-tree/ 3.题目内容 英文:Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes h

C++ 判断一颗树腾讯分是分网站开发否是BST(二叉排序树)

因为腾讯分分网站开发haozbbs.com Q1446595067二叉排序树的中序遍历结果是递增的,所以可以通过中序遍历存储结果,再判断是否为递增的数组.1) 对树进行中序遍历,将结果保存在b[]数组中.2) 检测b[]数组中元素是否为升序排列.如果是,则这棵树为BST.时间复杂度: O(n) 代码如下: #include<iostream> #include<algorithm> using namespace std; typedef struct BinaryTreeNode

二叉树——判断一棵树是否是平衡二叉树

平衡二叉树 (空树或者左右两个孩子高度差不超过1) 在涉及到二叉树的题目时,递归函数非常好用 列出可能性->整理出返回值的类型->整个递归过程按照同样的结构得到子树的信息,整合子树的信息,加工出应该返回的信息,向上返回 1.左子树是否平衡 2.右子树是否平衡 3.左子树的高度 4.右子树的高度 根据可能性,使用递归函数 可能性->返回值的类型 //列出可能性 左右子树是否分别平衡,若平衡后,左右子树的高度 public static class ReturnData{ boolean i

判断一颗二叉树是否为二叉平衡树 python 代码

输入一颗二叉树,判断这棵树是否为二叉平衡树.首先来看一下二叉平衡树的概念:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树.因此判断一颗二叉平衡树的关键在于求出左右子树的高度差,而二叉树的高度又是怎么定义的呢?二叉树的高度指的是从根节点到叶子节点所有路径上包含节点个数的最大值.所以我们可以得出,父亲节点的高度与左右子树高度的关系为:父亲节点的高度=max(左子树高度,右子树高度)+1,同时我们知道,叶子节点的高度值为1(或则0,这里定义1或者0对判断结

数据结构之树篇3——平衡二叉树(AVL树)

引入 上一篇写了二叉排序树,构建一个二叉排序树,如果构建序列是完全有序的,则会出现这样的情况: 显然这种情况会使得二叉搜索树退化成链表.当出现这样的情况,二叉排序树的查找也就退化成了线性查找,所以我们需要合理调整二叉排序树的形态,使得树上的每个结点都尽量有两个子结点,这样整个二叉树的高度就会大约在\(log(n)\) 左右,其中 \(n\) 为结点个数. 基本性质 ? AVL树也称为平衡二叉树,是一种自平衡的二叉排序树,本质上仍然是一颗二叉排序树,只是增加了"平衡"的要求,平衡是指,对

编程实现判断一棵二叉树是否是平衡二叉树

Balanced Binary Tree Given a binary tree, determine if it is height-balanced. For this problem, a height-balanced binary tree is defined as a binary tree in which the depth of the two subtrees of every node never differ by more than 1. 思路:遍历这棵二叉树,每访问

判断两个树是否互相镜像

// 3. 判断两个树是否互相镜像 public static boolean isMirrorRec(TreeNode r1, TreeNode r2){ // 如果两个树都是空树,则返回true if(r1==null && r2==null){ return true; } // 如果有一棵树是空树,另一颗不是,则返回false if(r1==null || r2==null){ return false; } // 如果两个树都非空树,则先比较根节点 if(r1.val != r2

判断一颗二叉树是不是另外一颗的子结构

这是一道比较经典的题目.我先是在百度的在线笔试中遇到,然后发现剑指Offer上有原题.当然题目并不完全一样不过大致相同. 百度笔试是给你两个根节点判断第棵树是不是第一棵树的子树.剑指Offer是问你第二颗数是不是第一棵树的子结构(也就是说可是是第一棵二叉树的中间阶段). 笔试的时候恁是没完全通过测试案例,就差几个,实在也是不知道是什么问题.这次剑指Offer的在线测试中,发现他的描述不是很准确.我一开始以为空树是任何树的子结构,结果空树不是任何数的子结构. 第一版代码:算法复杂度是O(M * N

根据前序序列和中序序列,重建一颗树(PHP递归实现)

class TreeNode{ public $data; public $lchild = null; public $rchild = null; public function __construct($data='',$lchild=null,$rchild=null){ $this->data = $data; $this->lchild = $lchild; $this->rchild = $rchild; } } //根据前序和中序,重建一颗树 //$pre 前序遍历的数组