判断一棵树是否是完全二叉树

Posted 程序员弹药库

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了判断一棵树是否是完全二叉树相关的知识,希望对你有一定的参考价值。

判断一棵树是否是完全二叉树

根据完全二叉树的定义,如果二叉树上某个结点有右孩子无左孩子则一定不是完全二叉树;否则如果二叉树上某个结点有左孩子而没有右孩子,那么该结点所在的那一层上,该结点右侧的所有结点应该是叶子结点,否则不是完全二叉树。

 
   
   
 
  1. import java.util.LinkedList;

  2. import java.util.Queue;

  3. /**

  4. * 判断是否为完全二叉树

  5. */

  6. public class IsCompleteBTree {

  7. public static class Node {

  8. int data;

  9. Node left;

  10. Node right;

  11. public Node(int data) {

  12. this.data = data;

  13. }

  14. }

  15. public static boolean isCompleteBTree(Node root) {

  16. if (root == null) {

  17. return true;

  18. }

  19. Queue<Node> queue = new LinkedList<>();

  20. queue.offer(root);

  21. boolean leaf = false;

  22. while (!queue.isEmpty()) {

  23. Node node = queue.poll();

  24. //左空右不空

  25. if (node.left == null && node.right != null) {

  26. return false;

  27. }

  28. //如果开启了叶子结点阶段,结点不能有左右孩子

  29. if (leaf &&

  30. (node.left != null || node.right != null)) {

  31. return false;

  32. }

  33. //将下一层要遍历的加入到队列中

  34. if (node.left != null) {

  35. queue.offer(node.left);

  36. }

  37. if (node.right != null) {

  38. queue.offer(node.right);

  39. } else {

  40. //左右均为空,或左不空右空。该结点同层的右侧结点均为叶子结点,开启叶子结点阶段

  41. leaf = true;

  42. }

  43. }

  44. return true;

  45. }

  46. public static void main(String[] args) {

  47. Node root = new Node(1);

  48. root.left = new Node(2);

  49. root.right = new Node(3);

  50. root.left.right = new Node(4);

  51. System.out.println(isCompleteBTree(root));//false

  52. }

  53. }

以上是关于判断一棵树是否是完全二叉树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树——判断一棵树是否是完全二叉树

判断一棵树是否是完全二叉树

急急~判断一棵二叉树是满二叉树的算法!

NC60 判断一棵二叉树是否为搜索二叉树和完全二叉树

判断一棵二叉树是否为完全二叉树

判断一棵二叉树是否为完全二叉树