如何检查树是否完整?

时间:2015-11-09 01:15:49

标签: java recursion binary-search-tree

这是我的二元搜索树类:

public class BinarySearchTree {

        class BSTNode {
                int data;
                BSTNode rchild;
                BSTNode lchild;

                //constructor
                public BSTNode(int n){
                        data=n;
                        lchild=rchild=null;

                }
        }

        private BSTNode root;
        private int size;

        public BinarySearchTree() {
                root = null;
                size = -1;
        }

        public boolean insert(int n) {
                if (root == null)
                        root = new BSTNode(n);
                else
                        insert(n, root);
                return true;
        }

        private void insert(int n, BSTNode r) {

                if (r.data > n)
                        if (r.lchild == null)
                                r.lchild = new BSTNode(n);
                        else
                                insert(n, r.lchild);
                else

                if (r.data < n)
                        if (r.rchild == null)
                                r.rchild = new BSTNode(n);
                        else
                                insert(n, r.rchild);


        }
}

实际上我发现编写一个检查我的树是否是完整二叉树的方法时遇到了困难。有人可以为我提供解决方案吗。

我会遵循这个定义: 完整二叉树:除最后一级之外的每个级别都已完全填充,所有节点都是左对齐的。

1 个答案:

答案 0 :(得分:0)

您需要对BSTNode的实施进行一些修改,但我相信这应该符合您的需求。基本思想是递归遍历树并确保&#34;完成&#34;每个子树都满足属性。

boolean checkBinaryTreeCompleteness(TreeNode root) {
  if (root != null) {
    if (root.right == null && root.left == null) {
      return true;
    }
    if (root.right != null && root.left != null) {
      return checkBinaryTreeCompleteness(root.left) && checkBinaryTreeCompleteness(root.right);
    }
  }
  return false;
}