三:求二叉树的深度以及判断二叉树是否平衡

原创 2015年07月07日 13:20:55

求树的深度

int TreeDepth(BinaryTreeNode* pRoot) 

   if (pRoot == NULL) 

       return 0; 


   int nLeftDepth = TreeDepth(pRoot->m_pLeft); 

   int nRightDepth = TreeDepth(pRoot->m_pRight); 

 

    return(nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1); 

 

判断是否为平衡二叉树

方法一:

bool IsBalanced(BinaryTreeNode* pRoot) 

   if(pRoot== NULL) 

       return true; 

 

   int nLeftDepth = TreeDepth(pRoot->m_pLeft); 

   int nRightDepth = TreeDepth(pRoot->m_pRight); 


   int diff = nRightDepth-nLeftDepth; 

 

   if (diff>1 || diff<-1) 

       return false; 

 

   returnIsBalanced(pRoot->m_pLeft)&&IsBalanced(pRoot->m_pRight); 

 

方法二:

由于上述方法在求该结点的的左右子树深度时遍历一遍树,再次判断子树的平衡性时又遍历一遍树结构,造成遍历多次。如果我们用后序遍历的方式遍历二叉树的每一个结点,在遍历到一个结点之前我们已经遍历了它的左右子树。只要在遍历每个结点的时候记录它的深度(某一结点的深度等于它到叶节点的路径的长度),我们就可以一边遍历一边判断每个结点是不是平衡的。

 

bool IsBalanced(BinaryTreeNode* pRoot, int*depth) 

    if(pRoot==NULL) 

    { 

        *depth =0; 

        returntrue; 

    } 

 

    int nLeftDepth,nRightDepth; 

    bool bLeft=IsBalanced(pRoot->m_pLeft, &nLeftDepth); 

    bool bRight= IsBalanced(pRoot->m_pRight, &nRightDepth); 

     

    if (bLeft&& bRight) 

    { 

        int diff= nRightDepth-nLeftDepth; 

        if(diff<=1 || diff>=-1) 

        { 

           *depth = 1+(nLeftDepth > nRightDepth ? nLeftDepth :nRightDepth); 

           return true; 

        } 

    } 

     

    returnfalse; 

 

bool CallIsBalanced(BinaryTreeNode* pRoot) 

    int depth =0; 

 

    returnIsBalanced(pRoot, &depth); 

}  

二叉树的深度求值和判断是否是平衡

#ifndef BINTREE_H #define BINTREE_H #include #include #include using namespace std; template ...

求二叉树深度、判断是否是平衡二叉树

求二叉树深度:递归的方法:从根节点按照先序顺序遍历二叉树,返回左子树和右子树中较大的深度,再加上1就是根节点的深度。C++代码实现:typedef struct TreeNode{ int d...

【面试题】剑指Offer-39-求二叉树的深度和判断一颗树是否为平衡二叉树

题目概述 题目1:求二叉树的深度 题目2:判断一颗二叉树是否为平衡二叉树 解题思路 求二叉树的深度 二叉树的深度呢,这个问题比较简单 递归遍历一遍二叉树,每到一个节点,便返...

剑指offer 39. 二叉树的深度和判断是否为平衡二叉树

class TreeNode{ int data; TreeNode left; TreeNode right; } //题目1:输入二叉树的根节点,返回数的最大深度 public class...

求二叉树的深度,判断该树是不是平衡二叉树

剑指offer两道编程题二叉树深度 输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。 求二叉树的深度,有三种方法: 1. **...

二叉树的深度,判断是否是平衡二叉树

二叉树的深度,判断是否是平衡二叉树
  • A784586
  • A784586
  • 2017年03月20日 20:30
  • 156

二叉查找树-平衡二叉树-红黑树-B树的深度对比分析

我们这个专题介绍的动态查找树主要有: 二叉查找树(BST),平衡二叉查找树(AVL),红黑树(RBT),B~/B+树(B-tree)。这四种树都具备下面几个优势: (1) 都是动态结构。在删除,插入...
  • hzx5212
  • hzx5212
  • 2013年09月29日 09:43
  • 1084

【数据结构】中判断一棵树是否为平衡二叉树

【数据结构】中判断一棵树是否为平衡二叉树

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

平衡二叉树是指:父节点的左子树和右子树的高度之差不能大于1,也就是说不能高过1层。 判断一棵树是否为平衡二叉树,需要判断每个节点的左右子树的深度,只判断整个树的根节点是不行的。 刚做了一道...

判断是否为平衡二叉树

平衡二叉树对于查询效率的优化有重要意义,这次问题是输入一颗二叉树,判断该树是否为平衡二叉树。 我最开始理解的二叉树其实就是最大高度和最小高度差值小于或则等于1。并用代码实现出来: 1、分别找到树的...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:三:求二叉树的深度以及判断二叉树是否平衡
举报原因:
原因补充:

(最多只允许输入30个字)