Java 如何检查树是否完整?

Java 如何检查树是否完整?,java,recursion,binary-search-tree,Java,Recursion,Binary Search Tree,这是我的二叉搜索树类: public class BinarySearchTree { class BSTNode { int data; BSTNode rchild; BSTNode lchild; //constructor public BSTNode(int n){

这是我的二叉搜索树类:

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);


        }
}
公共类二进制搜索树{
类节点{
int数据;
bstld;
BSTLchild;
//建造师
公共节点(int n){
数据=n;
lchild=rchild=null;
}
}
私有节点根;
私有整数大小;
公共二进制搜索树(){
root=null;
大小=-1;
}
公共布尔插入(int n){
if(root==null)
根=新节点(n);
其他的
插入(n,根);
返回true;
}
专用void插入(int n,bstr节点){
如果(r.data>n)
if(r.lchild==null)
r、 lchild=新节点(n);
其他的
插入(n,r.lchild);
其他的
如果(r.数据
实际上,我发现编写一个方法来检查我的树是否是一个完整的二叉树有困难。有人能给我提供解决方案吗

我将遵循这一定义:
完整二叉树:除最后一级外,所有级别都已完全填充,所有节点都保持对齐。

您必须对其进行一些修改,以实现
BSTNode
,但我相信这应该符合您的需要。基本思想是递归遍历树,并确保每个子树都满足“complete”属性

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

为了实现
BSTNode
,您必须对此进行一些修改,但我相信这应该适合您的需要。基本思想是递归遍历树,并确保每个子树都满足“complete”属性

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

欢迎来到这个网站!到目前为止你都尝试了什么?欢迎来到这个网站!到目前为止你试过什么?