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

  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. }  

 

转载于:https://www.cnblogs.com/mmziscoming/p/5779122.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值