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

  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.   
  8. int TreeDepth(BinaryTreeNode* pRoot)  
  9. {  
  10.     if (pRoot == NULL)  
  11.         return 0;  
  12.   
  13.     int nLeftDepth = TreeDepth(pRoot->m_pLeft);  
  14.     int nRightDepth = TreeDepth(pRoot->m_pRight);  
  15.   
  16.     return (nLeftDepth>nRightDepth)?(nLeftDepth+1):(nRightDepth+1);  
  17. }  

 

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

 

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

 

[cpp] view plain copy
 
 print?
    1. bool IsBalanced(BinaryTreeNode* pRoot)  
    2. {  
    3.     if(pRoot== NULL)  
    4.         return true;  
    5.   
    6.     int nLeftDepth = TreeDepth(pRoot->m_pLeft);  
    7.     int nRightDepth = TreeDepth(pRoot->m_pRight);  
    8.     int diff = nRightDepth-nLeftDepth;  
    9.   
    10.     if (diff>1 || diff<-1)  
    11.         return false;  
    12.   
    13.     return IsBalanced(pRoot->m_pLeft)&&IsBalanced(pRoot->m_pRight);  
    14. }  

 

posted @ 2016-08-17 11:01  maxandhchen  阅读(549)  评论(0编辑  收藏  举报