当前位置:   article > 正文

7,二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法。_对于一颗用二叉链表存储的二叉树,用c语言写一个递归函数判别该二叉树是否完全

对于一颗用二叉链表存储的二叉树,用c语言写一个递归函数判别该二叉树是否完全

7,二叉树按二叉链表形式存储,写一个判别给定二叉树是否是完全二叉树的算法。

LeetCode 958. 二叉树的完全性检验

思路:采用层次遍历。只有一下两种情况出现时,一棵树才不是完全二叉树

  • 一个节点的左子树为空,右子树非空
  • 在n层遇到过非空节点,然后在n+1层又遇到了非空节点
  1. bool isCompleteTree(TreeNode* root) {
  2. if(!root){
  3. return true;
  4. }
  5. queue<TreeNode *> v;
  6. v.push(root);
  7. // 用来标识是否遇到过空
  8. bool em = false;
  9. while(!v.empty()){
  10. int n = v.size();
  11. while(n--){
  12. TreeNode *p = v.front();
  13. v.pop();
  14. // 如果左子树空,右子树不空,指定不符合
  15. if(!p->left && p->right){
  16. return false;
  17. }
  18. // 曾经遇到过空,又遇到了非空,也不符合
  19. if(em && (p->left || p->right)){
  20. return false;
  21. }
  22. if(!p->left || !p->right){
  23. em = true;
  24. }
  25. if(p->left){
  26. v.push(p->left);
  27. }
  28. if(p->right){
  29. v.push(p->right);
  30. }
  31. }
  32. }
  33. return true;
  34. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/blog/article/detail/50385
推荐阅读
相关标签
  

闽ICP备14008679号